比较 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 将创建一个新数组,其中包含原始数组中返回真值的每个元素。考虑到这一点,您可以使用 filtersome 的组合来过滤掉您在 userItems:

中拥有键的所有对象
const selectedItems = items.filter(item =>
  userItems.some(userItem => userItem.itemKey === item.itemKey)
);