首页 > 解决方案 > Javascript数组的区别

问题描述

我有两个这样的数组

data = [{id: 1, name: apple},
{id: 2, name: mango},
{id: 3, name: grapes},
{id: 4, name: banana}]

data2 =[{id: 1, name: apple},
{id: 3, name grapes}]

我的预期结果是:

[{ id: 2, name: mango}, 
{id:4, name: banana}]

我的代码是

let finalData =[];
data.forEach(result => {
 data2.find(datum => {
  if(datum['id'] === result['id]{
    finalData.push(result);
   }
 })
})

我得到错误的结果。我可以使用的最简单的代码或库是什么?

标签: javascriptdifference

解决方案


您的示例数据没有意义,但假设您的意思是具有匹配 ID 的所有数据项也具有匹配的名称,并且还假设您想要一组 ID 在两组数据中相同的所有项目,您可以使用 aSet来跟踪一个数组中存在哪些 ID,然后通过在集合中具有其 ID 的那些过滤第二个数组:

const idsInFirst = new Set(data.map(d => d.id));
const intersection = data2.filter(d => idsInFirst.has(d.id));

之所以使用中间Set结构,是因为它允许O(1)在一次扫描后进行查找,这比一遍又一遍地重复扫描第一个数组更有效。

如果您的意思是说您想要数据集之间的差异(其中排除的项目data在 中data2),那么您可能想要否定/反转一些东西:

const idsToExclude = new Set(data2.map(d => d.id));
const difference = data.filter(d => !idsToExclude.has(d.id));

编辑

在您进行明确的编辑之后,这是您想要的第二个代码块。


推荐阅读