微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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))

原文地址:https://www.jb51.cc/wenti/3282761.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐