js-对象数组新增对象元素-去重

场景: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))
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值