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

Posted

技术标签:

【中文标题】使用 ES6 或 TypeScript 获取两个对象数组之间的差异【英文标题】:Get diff between two arrays of objects with ES6 or TypeScript 【发布时间】:2016-12-06 15:09:43 【问题描述】:

我有以下数组:

  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】:

可能是这样的:

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)

【讨论】:

以上是关于使用 ES6 或 TypeScript 获取两个对象数组之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

Typescript学习记录

Typescript:esnext 编译器选项会破坏从外部库导入的 es6

如何从Typescript中以#或@开头的属性获取JSON数据

TypeScript 使用 ES6 解构骚操作

JS超集对TypeScript的Map对象以及联合类型的深入实战

为什么Typescript不能使用包含函数的数组?