如何合并两个相同长度的对象数组?
var array1 = [
{name: "lang", value: "English"},
{name: "age", value: "18"}
];
var array2 = [
{code: "EN", text: "English language"},
{code: "DE", value: "German", text: "German language"}
];
目标是创建以下数组:
var array3 = [
{name: "lang", value: "English", code: "EN", text: "English language"},
{name: "age", code: "DE", value: "German", text: "German language"}
];
我们的想法是创建一个新的数组,其中array1
是基数,array2
如果它们共享相同的键,则会覆盖这些值,否则会添加到基数组中。合并应按照对象在每个数组中出现的顺序依次发生。
在这个例子中,数组包含两个对象,但根据我的实际情况,我有几十个对象。
这就是我一直想要做的,但这只会合并第一组对象:
var array3 = Object.assign(array1[0], array2[0]);
我如何循环或映射它?
答案 0 :(得分:2)
一个map
的简单Object.assign
会做到这一点。分配给一个新的空对象,以避免改变现有的对象。
var array1 = [
{name: "lang", value: "English"},
{name: "age", value: "18"}
];
var array2 = [
{code: "EN", text: "English language"},
{code: "DE", value: "German", text: "German language"}
];
var array3 = array1.map((obj, index) => Object.assign({}, obj, array2[index]));
console.log(array3);
如果您的数组数量不明,请执行以下操作:
const arrays = [
array1,
array2,
array3,
// …
];
然后你可以使用这种方法:
const mergedArray = Array.from({
length: arrays[0].length
}, (_, index) => Object.assign({}, ...arrays.map(({[index]: obj}) => obj))));
使用以下示例查看此操作:
const arrays = [
[
{a: 3, b: 5},
{a: 7, b: 2},
{a: 1}
],
[
{b: 8, c: 42},
{a: 1, b: 12, c: 44},
{b: 0}
],
[
{d: 14, e: 15},
{d: 7},
{a: 10}
]
];
console.log(Array.from({
length: arrays[0].length
}, (_, index) => Object.assign({}, ...arrays.map(({[index]: obj}) => obj))));