在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/GO  HTML/ 兩個Obj-array怎么過濾掉其中相同的項

兩個Obj-array怎么過濾掉其中相同的項

    var arr = [
        {
            id: 111,
            name: 'aaa'
        },
        {
            id: 222,
            name: 'bbb'
        },
        {
            id: 333,
            name: 'ccc'
        }
    ]

    var arr1 = [
        {
            id: 111,
            name: 'aaa'
        },
        {
            id: 222,
            name: 'bbb'
        }
    ]

    
    //想要的
    var arr2 = [{
        id: 333,
        name :'ccc'
    }]
回答
編輯回答
深記你

let intersection = arr1.filter(v => arr2.includes(v))
數(shù)組取交集

2017年8月10日 19:17
編輯回答
殘淚

可以嘗試這么做:

arr1的補集 concat arr2的補集,即是兩者的非交集。
后邊的rules用來實現(xiàn)可復(fù)用的函數(shù)。傳入要檢查的key集合即可。



  function filter (arr1, arr2, rules) {
    return arr1.filter(item1 => !arr2.some(item2 => rules.every(key => item1[key] === item2[key])))
  }

  function build (arr1, arr2, rules) {
    return [].concat(filter(arr1, arr2, rules), filter(arr2, arr1, rules))
  }

  let result = build(arr1, arr2, ['id', 'name'])

  console.log(result)
2017年2月28日 04:54
編輯回答
憶往昔

如果一個數(shù)組中沒有重復(fù)的對象的話可以這樣吧,雖然感覺效率不怎么高

var copyArr = arr2.map(val => JSON.stringify(val))

arr1 = arr1.filter(obj => {
  let index = copyArr.indexOf(JSON.stringify(obj))
  
  if (index === -1) return true
  arr2.splice(index, 1)
  copyArr.splice(index, 1)

})

arr1.concat(arr2)
2018年4月21日 02:31
編輯回答
疚幼

要考慮id相同的才是相同的嗎?還是說整體比較呀?當(dāng)然不管怎么樣,這個東西都叫key,那好了,我們假設(shè)id比較。

引入lodashjs,去看看

console.log(_.xorBy(arr1, arr, 'id'), "id")

假如是其他key,如整體比較。那么

console.log(_.xorBy(arr1, arr, function(v){return JSON.stringify(v)}),'fun')
2018年8月19日 13:55