首页 > 解决方案 > 两个对象数组的打字稿差异

问题描述

我有两个对象数组,想找到第二个数组中缺少但属于第一个数组的项目,基本上是array1-array2。我尝试使用过滤器,但无法获得所需的结果。请帮忙。提前致谢。

这是代码:

 testData=[
       {id: 0, name: "policy001"},
       {id: 2, name: "policy002"}];
       sourceData= [
          {id: 0, name: "policy001"},
          {id: 2, name: "policy002"},
          {id: 3, name: "policy003"},
          {id: 4, name: "policy004"},
          {id: 5, name: "policy005"}, 
      ];

      let missing = sourceData.filter(item =>  testData.indexOf(item) < 0);
      console.log("Miss")
      console.log(missing )//Returns the sourceData instead of diff.

标签: javascripttypescript

解决方案


您的代码不起作用的原因是数组中的对象是对象的“地址”。所以当然 indexOf 没有工作

试试下面:

let missing = sourceData.filter(a => !testData.find(b => a.id === b.id));

推荐阅读