首页 > 解决方案 > 比较 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'
    });

标签: javascriptreactjsfirebaseimmutable.jsreselect

解决方案


filter将使用原始数组中返回真值的每个元素创建一个新数组。考虑到这一点,您可以使用filterand some的组合来过滤掉您拥有 in 键的所有对象userItems

const selectedItems = items.filter(item =>
  userItems.some(userItem => userItem.itemKey === item.itemKey)
);

推荐阅读