【发布时间】:2022-11-17 19:14:55
【问题描述】:
我有两个数组:
例如:
arraySelectedItems = [{id: 1, name: "item1"}, {id: 2, name: "item2"}]
arraySavedItems = [{id: 1, name: "item1"}, {id: 2, name: "item2"}]
现在我需要检查 arraySavedItems 中是否有一些项目不存在于 arraySelectedItems 中,在这种情况下,我将去填充另一个名为 arrayDeletedItems 的数组。
如果两个数组具有相同的项目,我不需要填充 arrayDeletedItems。
所以我试过这段代码:
arraySavedItems.filter((itemSaved) => !arraySelectedItems.find((itemSel) => {
if (itemSaved.id !== itemSel.id) {
arrayDeletedItems.push(itemSaved)
}
}
))
所以有了这个数据:
arraySelectedItems = [{id: 1, name: "item1"}, {id: 2, name: "item2"}]
arraySavedItems = [{id: 1, name: "item1"}, {id: 2, name: "item2"}]
我希望 arrayDeletedItems 将是:
arrayDeletedItems = []
取而代之的是这个数据,例如:
arraySelectedItems = [{id: 1, name: "item1"}]
arraySavedItems = [{id: 1, name: "item1"}, {id: 2, name: "item2"}]
我希望 arrayDeletedItems 将是:
arrayDeletedItems = [{id: 2, name: "item2"}]
使用我的代码,我收到了具有所有值的 arrayDeletedItems:
arrayDeletedItems = [{id: 1, name: "item1"}, {id: 2, name: "item2"}]
【问题讨论】:
-
只是为了澄清出了什么问题。您的代码检查是否有任何 ID 不匹配,然后添加。问题是它将遍历数组中的所有项目。在你最后一个有 1 个选定项目和 2 个保存项目的例子中,它会循环并在第一次迭代中这样说: itemSaved.id (value:1) = itemSel.id(value:1) 意味着它不会进入 if陈述。现在它将转到 itemSaved 编号 2。现在您将看到 itemSaved.id(value:2) = itemSel.id(value:1)。这将进入 if 语句,因为值不相等
-
是的,我已经在调试器中尝试过并注意到这一点。无论如何谢谢你的解释:)
标签: javascript angular