我有不同的相同大小的数组:
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文档进行了足够的搜索,但是找不到更好的方法。
答案 0 :(得分:3)
这应该有效:
_.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 }) );
答案 1 :(得分:1)
在普通的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);