比较 2 个不可变列表是否相等
Compare 2 immutable lists for equality
我想做一些我认为已经用 Immutable.js 列表做过很多次的事情,但我似乎找不到这种情况。我有 2 个列表。一个与项目。一个包含被选为数据的项目的键。基本上从项目中选择事物的用户。我将项目中的密钥作为数据存储在选择该项目的用户的个人资料中(在 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
和 some 的组合来过滤掉您在 userItems
:
中拥有键的所有对象
const selectedItems = items.filter(item =>
userItems.some(userItem => userItem.itemKey === item.itemKey)
);
我想做一些我认为已经用 Immutable.js 列表做过很多次的事情,但我似乎找不到这种情况。我有 2 个列表。一个与项目。一个包含被选为数据的项目的键。基本上从项目中选择事物的用户。我将项目中的密钥作为数据存储在选择该项目的用户的个人资料中(在 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
和 some 的组合来过滤掉您在 userItems
:
const selectedItems = items.filter(item =>
userItems.some(userItem => userItem.itemKey === item.itemKey)
);