繁体   English   中英

使用lodash或vanila js将不同的数组转换为对象数组

[英]convert different arrays to array of object using lodash or vanila js

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

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文档进行了足够的搜索,但是找不到更好的方法。

这应该工作:

_.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 }) );

在普通ES6中,您可以使用具有简短属性的对象,并迭代键和数组的项目。

 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); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM