需要
有两个对象数组 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 的官网文档