跳至主要內容

数组对象对比找出差异项

Mr.Chen开发笔记JS大约 1 分钟约 337 字

数组对象对比找出差异项

写公司业务遇到了这个问题,需要对比两个对象数组找出差异项,这种场景普遍是两个数据对象是一个包含另一个的关系,也就是一个是另一个的子数组

自然想到了用forEach ,请注意如果数组在迭代时被修改了,则其他元素会被跳过open in new window

var words = ['one', 'two', 'three', 'four']
words.forEach(function (word) {
  console.log(word)
  if (word === 'two') {
    words.shift()
  }
})
// one
// two
// four

所以外层数组必须是内层数组的子数组

let arr1 = [{ Num: 'A' }, { Num: 'B' }]
let arr2 = [
  { Num: 'A', Name: 't1' },
  { Num: 'B', Name: 't2' },
  { Num: 'C', Name: 't3 ' },
]
arr1.forEach((item) => {
  arr2.forEach((item2, index) => {
    if (item.Num === item2.Num) {
      arr2.splice(index, 1)
    }
  })
})

console.log(arr2) //  [ { Num: 'C', Name: 't3 ' } ]

另外一种比较讨巧,也很好理解。就是把对象数组中的每一项的唯一标识单独搞成一个数组,这样处理起来就简单很多了。你也不需要像上面那两种方式考虑那么多

let arr1 = [{ Num: 'A' }, { Num: 'B' }]
let arr2 = [
  { Num: 'A', Name: 't1' },
  { Num: 'B', Name: 't2' },
  { Num: 'C', Name: 't3 ' },
]
let arr1Num = []
arr1.forEach((item) => {
  arr1Num.push(item.Num)
})
let result = arr2.filter((v) => arr1Num.indexOf(v.Num) === -1)

console.log(result) // [ { Num: 'C', Name: 't3 ' } ]
上次编辑于: