javascript - 比较两个数组中的对象并根据 JavaScript 中的匹配返回

标签 javascript arrays

我为此使用 React,但概念是在 javascript 中。因此,为了简单起见,我希望我可以省略 React 代码。

我有两个需要过滤掉的数组。我的目标是映射一个数组并检查该对象的属性是否与另一个数组的对象中的属性匹配。

第一个数组如下所示:

[{id: 1}, {id: 2}, {id: 3}, {id: 4}]

第二个看起来像这样:

[{id: 3}, {id: 4}]

因此,如果一个对象与另一个数组中的对象具有相同的 id 属性,则返回一个 React 元素/任何东西。

这是我要做的事情,但它只遍历索引并比较它们。这似乎正确地循环第一个数组,但我似乎无法通过索引以外的任何内容循环第二个数组。

return arr1.map((e, i) => {
  return if (e.id === arr2[i].id) {
    return <div>Match</div>
  } else {
    return <div>No Match</div>
  }
})

最佳答案

您的问题是您正在逐个索引进行比较。您想知道 arr1 中的元素是否在 arr2 中的任何地方,对吧?

我会使用arr2.filter来搜索所有arr2。所以你会得到这样的东西:

return arr1.map((e1, i) => {
  if (arr2.filter(e2 => e2.id === e1.id).length > 0) {  // If there's a match
    return <div>Match</div>
  } else {
    return <div>No Match</div>
  }
})

更新: 正如评论中所建议的,使用 Array.some 在这里更好:

return arr1.map((e1, i) => {
  if (arr2.some(e2 => e2.id === e1.id)) {  // If there's a match
    return <div>Match</div>
  } else {
    return <div>No Match</div>
  }
})

关于javascript - 比较两个数组中的对象并根据 JavaScript 中的匹配返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42636701/

相关文章:

javascript - 改变一个数即可得到等差数列

javascript - 动态改变 gage 的值

java - 问题从文件读取并使用二维数组对数据进行排序

javascript - for循环不返回结果

javascript - 如何有效地随机化索引之间的多个数组元素?

javascript - 如何为不同的元素获取不同的父类

javascript - d3.js 条形图不太像我想要的

javascript - Protractor 测试用例文档

php - 不返回填充数组的计数

java - 返回数组的剩余值