假设有两个对象数组,如下所示:
const arr1 = [
{ id: 1, name: '张三' },
{ id: 2, name: '李四' },
{ id: 3, name: '王五' },
];
const arr2 = [
{ id: 1, age: 20 },
{ id: 3, age: 22 },
{ id: 4, age: 25 },
];
我们需要将两个数组按照id合并成一个新的对象数组,其中新的数组应该包含id、name和age字段:
[
{ id: 1, name: '张三', age: 20 },
{ id: 2, name: '李四' },
{ id: 3, name: '王五', age: 22 },
{ id: 4, age: 25 },
]
我们可以使用reduce和find方法来解决这个问题:
const merged = arr1.reduce((acc, cur) => {
const match = arr2.find((obj) => obj.id === cur.id);
if (match) {
acc.push({ ...cur, ...match });
} else {
acc.push(cur);
}
return acc;
}, []);
arr2.forEach((obj) => {
const match = arr1.find((cur) => cur.id === obj.id);
if (!match) {
merged.push(obj);
}
});
首先,我们对第一个数组进行reduce操作,在回调函数中查找第二个数组中是否有与当前对象相同的id,如果有,就使用扩展运算符将两个对象合并,并将结果推入累加器中;如果没有,就将当前对象直接推入累加器中。最后,我们对第二个数组进行forEach操作,查找第一个数组中是否有与当前对象相同的id,如果没有,就将当前对象推入最终结果数组中。
上一篇:按不同规则从表中选择数据