获取打字稿中两个对象数组之间的不匹配对象

时间:2018-12-19 14:33:34

标签: json angular typescript

我有两个对象数组:

first = [
  { "id": "15", "name": "raza" },
  { "id": "1", "name": "sahir" },
  { "id": "54", "name": "ayyan" },
  { "id": "3", "name": "tahir" },
];

 second = [
  { "id": "15", "name": "razi" },
  { "id": "3", "name": "qasim" },
  { "id": "1", "name": "taha" },
];

我想根据其ID从“第一个”数组中获取不匹配的对象,例如

const result = this.first.filter(e => this.second.some(({id}) => e.id ==id ));

它给了我匹配的对象,但我想获得不匹配的对象。

2 个答案:

答案 0 :(得分:3)

像这样吗?

first = [
  { "id": "15", "name": "raza" },
  { "id": "1", "name": "sahir" },
  { "id": "54", "name": "ayyan" },
  { "id": "3", "name": "tahir" },
];

second = [
  { "id": "15", "name": "razi" },
  { "id": "3", "name": "qasim" },
  { "id": "1", "name": "taha" },
];

unmatched = first.filter(item => !second.some(_item => _item.id === item.id));

console.log(unmatched);

答案 1 :(得分:0)

这是 O(n + m)时间复杂度解决方案(n,m是数组长度):

background-image

let h={}; second.map(x=>h[x.id]=1);     // we use hash map with "second" ids
let result = first.filter(x=>!h[x.id]);