使用ES6或TypeScript在两个对象数组之间获取差异

时间:2016-08-01 13:45:23

标签: arrays typescript ecmascript-6

我有以下数组:

  arr1 = [{
      id: 1,
      name: 'Diego',
      age: 23
  }, {
      id: 2,
      name: 'Brian',
      age: 18
  }]

  arr2 = [{
      id: 1,
      name: 'Diego',
      age: 23
  }, {
      id: 2,
      name: 'Brian',
      age: 18
  }, {
      id: 3,
      name: 'Pikachu',
      age: 88
  }]

我需要在这两个数组之间得到区别,所期望的结果是:

arr3 [{id:3, name: 'Pikachu', age: 88}]

如何使用ES6TypeScript解决此问题?

我尝试使用SET,但没有效果。

1 个答案:

答案 0 :(得分:2)

这样的事情可能是:

let ids1 = arr1.map(item => item.id);
let ids2 = arr2.map(item => item.id);

let diff = ids1.map((id, index) => {
        if (ids2.indexOf(id) < 0) {
            return arr1[index];
        }
    }).concat(ids2.map((id, index) => {
        if (ids1.indexOf(id) < 0) {
            return arr2[index];
        }
    })).filter(item => item != undefined);

code in playground

相关问题