场景:a数组合并到b数组,两数组内部都是对象元素,合并后不能存在相同对象元素。
源数据
let aryObj = [ // 待合并数组
{a:1, c:2},
{a:12, c:22},
]
// 原数组
let aryObj2 = [{a:1, c:2}, { a:11, c:'age'}]
// 期待得到的结果
// aryObj2 [ { a: 1, c: 2 }, { a: 11, c: 'age' }, { a: 12, c: 22 } ]
方法1:数据源处理,转为map
aryObj2 = aryObj2.map(item => {
item = [JSON.stringify(item), item]
return item
})
aryObj2 = new Map(aryObj2)
aryObj.map(v => {
aryObj2.set(JSON.stringify(v),v)
})
aryObj2 = [...aryObj2.values()]
console.log('aryObj2', aryObj2)
方法2:查找处理,利用JSON字符串。
let aryObj2Temp = JSON.stringify(aryObj2)
aryObj.map(v => {
let vTemp = JSON.stringify(v)
if(!aryObj2Temp.includes(vTemp)) {
aryObj2.push(v)
}
})
console.log('aryObj2', aryObj2)
方法3:先push,后续程序过滤处理
aryObj.map(item => {
aryObj2.push(item)
})
function filter(aryObj) {
return aryObj.filter((v, index) =>
!aryObj.some((item, key) => {
if(index != key && index > key) {
return Object.keys(item).length === Object.keys(aryObj[index]).length && Object.keys(item).every(k=> item[k] === v[k]) // 长度相同再比较内部的属性值
} else {
return false
}
}
))
}
console.log('aryObj2', filter(aryObj2))
方法4:先push,后续利用map过滤处理
aryObj.map(item => {
aryObj2.push(item)
})
function filter2(aryObj) {
let res = new Map()
aryObj.map(item => {
res.set(JSON.stringify(item), item)
})
return [...res.values()]
}
console.log('aryObj2', filter2(aryObj2))