【问题标题】:convert different arrays to array of object using lodash or vanila js使用 lodash 或 vanilla js 将不同的数组转换为对象数组
【发布时间】:2017-12-06 12:37:15
【问题描述】:

我有不同大小的数组,如下所示:

var a = ["x", "y", "z"];
var b = [1,2,3];
var c = ["l", "m", "n"];

我希望它转换成这样的对象数组:

final_array = [{a: 'x', b: 1, c: 'l'}, {a: 'y', b: 2, c: 'm'}, {a: 'z', b: 3, c: 'n'}]

我知道我可以使用循环处理数组,并以某种方式将其转换为上述格式。我尝试过的是这种方式(因为所有数组的大小都相同):

var final_array = [];
_.forEach(a, function(value, key){
  var each_list = {};
  each_list.a = a[key];
  each_list.b = b[key];
  each_list.c = c[key];
  final_array[key] = each_list;
})
console.log(final_array); // [{a: 'x', b: 1, c: 'l'}, {a: 'y', b: 2, c: 'm'}, {a: 'z', b: 3, c: 'n'}]

但这似乎是一个非常漫长的方法,我相信使用 lodash 或其他方法会有一些好的方法来做到这一点。

谁能帮我解决这个问题。我已经对堆栈溢出和 lodash 文档进行了足够多的搜索,但找不到更好的方法。

【问题讨论】:

    标签: javascript angularjs lodash


    【解决方案1】:

    这应该可行:

    _.zipWith(a, b, c, function(a, b, c) {
      return { a: a, b: b, c: c };
    });
    

    或者,如果你可以使用 ES6,那么:

    _.zipWith(a, b, c, (a, b, c) => ({ a, b, c }) );
    

    【讨论】:

    • 谢谢@xs0 这就是我要找的。​​span>
    • 感谢@undefined 修复了第二个示例 :)
    • 太棒了,你把它弄得更漂亮了。谢谢
    【解决方案2】:

    在普通的 ES6 中,您可以使用带有 short hand properties 的对象并迭代数组的键和项。

    var a = ["x", "y", "z"],
        b = [1, 2, 3],
        c = ["l", "m", "n"],
        object = { a, b, c },
        result = Object.keys(object).reduce(function (r, k) {
            object[k].forEach((v, i) => (r[i] = r[i] || {})[k] = v);
            return r;
        }, []);
        
    console.log(result);

    【讨论】:

    • 感谢@Nina Scholz 的回答。虽然这是正确的,但我一直在寻找一些最短的方法来做到这一点,所以我接受了另一个答案。再次感谢。
    猜你喜欢
    • 2021-11-03
    • 2016-08-06
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 2016-09-17
    相关资源
    最近更新 更多