两个数组对象合并,相同的对象覆盖成最新的,不相同的合并并去重
let arr1 = [
{ id: 1, name: '蓝莓', price: 10 },
{ id: 2, name: '樱桃', price: 35 },
{ id: 3, name: '葡萄', price: 10 },
{ id: 4, name: '西瓜', price: 35 },
]
let arr2 = [
{ id: 1, num: 1 },
{ id: 2, num: 3 },
]
合并结果:
// 原数组
let arr1 = [
{ id: 1, name: '蓝莓', price: 10 },
{ id: 2, name: '樱桃', price: 35 },
{ id: 3, name: '葡萄', price: 10 },
{ id: 4, name: '西瓜', price: 35 },
]
let arr1Set = new Set(arr1.map((item) => item.id)) // 转换为Set
// 新数组
let arr2 = [
{ id: 1, num: 1 },
{ id: 2, num: 3 },
]
let arr2Map = new Map(arr2.map((item) => [item.id, item]))
let newArr = arr1
.map((item) => {
// 实现覆盖
if (arr2Map.has(item.id)) {
return { ...item, ...arr2Map.get(item.id) }
}
return { ...item }
})
.concat(...arr2.filter((item) => !arr1Set.has(item.id))) // 拼接多的部分,即没覆盖的部分
// 去重
let uniqueArr = Array.from(new Set(newArr.map((item) => item.id))).map(
(id) => {
return newArr.find((item) => item.id === id)
}
)
console.log(uniqueArr)