需求
有两个对象数组A和B,现在需要将两个数组中的对象合并,有则替换,无则新增,数组如下所示:
let A = [
{name: '张三', age: 18, sex:'男'},
{name: '李四', age: 26, sex:'男'},
{name: '王五', age: 32, sex:'男'}
]
let B = [
{name: '李四', age: 25, sex:'男', height: 170},
{name: '刘六', age: 32, sex:'女'}
]
合并后:C = [{
{name: '张三', age: 18, sex:'男'},
{name: '李四', age: 25, sex:'男', height: 170},
{name: '王五', age: 32, sex:'男'},
{name: '刘六', age: 32, sex:'女'}
}]
操作
我们分析下A和B数组,A和B中都存在name=李四的对象,所以要替换,而B中的name=刘六A中不存在,所以要新增,话不多说,我们通过js的reduce方法来做,代码如下:
const C = B.reduce((arr1, arr2)=>{
// arr1第一次进来是等于初始化化值:A
// arr2依次是B中的对象,挨个判断
let isFlag = false
arr1.forEach(item => {
if(item.name === arr2.name){
isFlag = true
// 如果找到则替换
item = Object.assign(item, arr2)
}
})
if(!isFlag){
// 如果找不到则新增
arr1.push(arr2)
}
// 返回结果值arr1,作为reduce下一次的数据
return arr1
}, A)
这样就能成功的合并A和B数组了,如果大家对reduce这个方法不太了解,可以查看mdn的官方文档
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。