javascript - 比较 2 个不可变列表的相等性
问题描述
我想做一些我认为已经用 Immutable.js 列表做过很多次的事情,但我似乎找不到这种情况。我有 2 个清单。一个与项目。一个包含被选为数据的项目的键。基本上是从item中选择了东西的用户。我将项目中的密钥作为数据存储在选择项目的用户的配置文件中(在 firebase 数据库中,并不重要)。所以我想简单地使用选择器过滤我的应用程序中的项目。在选择器中,我希望将项目中的密钥与我存储在用户配置文件中的密钥进行比较。如果匹配,则将项目中的匹配数据作为要使用的状态提供给我。我相信这应该是某种物品的过滤器?要进行比较,我还需要获取用户配置文件中存储的关键数据以进行比较,这也是一个不可变列表。
我正在努力
const selectedItems = items.filter(
item => {
userItems.forEach(userItem => {
if (userItem.itemKey === item.key) {
return item <-------pretty sure this is where Im doing it wrong
}
})
});
如果我从我的用户配置文件和过滤器中硬编码一条记录,我会得到我期望的新过滤列表,其中一个项目与下面的 id 匹配。
const selectedItems = items.filter(
item => {
return item.get('key') === '-LDR5cNZPjthN6nK9tzJ'
});
解决方案
filter
将使用原始数组中返回真值的每个元素创建一个新数组。考虑到这一点,您可以使用filter
and some的组合来过滤掉您拥有 in 键的所有对象userItems
:
const selectedItems = items.filter(item =>
userItems.some(userItem => userItem.itemKey === item.itemKey)
);