Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 比较两个不可变列表是否相等_Javascript_Reactjs_Firebase_Immutable.js_Reselect - Fatal编程技术网

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

Javascript 比较两个不可变列表是否相等,javascript,reactjs,firebase,immutable.js,reselect,Javascript,Reactjs,Firebase,Immutable.js,Reselect,我想做一些我本以为已经用Immutable.js列表做了很多次的事情,但我似乎找不到这种情况。我有两张清单。一个带物品。和一个包含选定为数据的项目的键。基本上是从项目中选择内容的用户。我将来自项目的密钥作为数据存储在选择该项目的用户的配置文件中(在firebase db中,这并不重要)。因此,我想简单地使用选择器过滤我的应用程序中的项目。在选择器中,我希望将项中的键与存储在用户配置文件中的键进行比较。 如果是匹配项,则将项中的匹配数据作为要使用的状态提供给我。我相信这应该是某种物品的过滤器??要

我想做一些我本以为已经用Immutable.js列表做了很多次的事情,但我似乎找不到这种情况。我有两张清单。一个带物品。和一个包含选定为数据的项目的键。基本上是从项目中选择内容的用户。我将来自项目的密钥作为数据存储在选择该项目的用户的配置文件中(在firebase db中,这并不重要)。因此,我想简单地使用选择器过滤我的应用程序中的项目。在选择器中,我希望将项中的键与存储在用户配置文件中的键进行比较。 如果是匹配项,则将项中的匹配数据作为要使用的状态提供给我。我相信这应该是某种物品的过滤器??要进行比较,我还需要获取用户配置文件中存储的密钥数据,以进行比较,这也是一个不可变的列表

我在努力

   const selectedItems = items.filter(
    item => {
      userItems.forEach(userItem => {
       if (userItem.itemKey === item.key) {
          return item  <-------pretty sure this is where  Im doing it wrong
       }
     })
   });

filter
将使用原始数组中返回truthy值的每个元素创建一个新数组。考虑到这一点,您可以结合使用
filter
,并过滤掉您在
userItems
中拥有密钥的所有对象:

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

使用映射而不是foreach-map返回数组,而foreach不返回数组<代码>userItems.map(是的,我明白你的意思了。我刚才说了。不过没有区别。你能传入一个
selectedItems
+
selectedTeam
的示例吗?预期的返回结果霍尔的解决方案工作得很好。过滤器只需要布尔值。使用数组。一些过滤器最有意义。非常优雅。谢谢你的帮助。看起来不错。我仍然没有返回任何值。让我再测试一下。我会回复你的。谢谢。如果我在上面建议的代码的第二行添加一个返回值,它通常会起作用。但是我只返回了一个值,而不是我知道我的用户选择的预期的2个项目。思考??const selectedItems=items.filter(item=>return userItems.some(userItem=>userItem.itemKey===item.itemKey));好的,是的。不需要再返回了。谢谢!我有一些其他的清理,但这很好。谢谢!!刚刚开始看到/获得选择器的威力。所以对我来说是一个全新的世界。:)
const selectedItems = items.filter(item =>
  userItems.some(userItem => userItem.itemKey === item.itemKey)
);