比较2个不可变列表是否相等

时间:2018-06-30 16:00:16

标签: javascript reactjs firebase immutable.js reselect

我正在寻找可以通过Immutable.js Lists做过很多次的事情,但是我似乎找不到这种情况。我有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'
    });

1 个答案:

答案 0 :(得分:1)

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

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