我为此使用 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/