Javascript Immutable.Set.contains返回false

Javascript Immutable.Set.contains返回false,javascript,immutable.js,Javascript,Immutable.js,我想创建一组不可变的路径。在我的例子中,路径只是一个字符串数组。假设我们有以下路径 var paths = [["a"], ["a", "b", "c"]]; 然后像这样创建不可变集 var selectedPaths = Immutable.Set(paths); 虽然selectedPaths.first()返回[“a”],但我无法理解为什么selectedPaths.contains([“a”])返回false 编辑: 嗯,我得到了一个关于为什么会发生这种情况的答案,但我仍然无法让它按

我想创建一组不可变的路径。在我的例子中,路径只是一个字符串数组。假设我们有以下路径

var paths = [["a"], ["a", "b", "c"]];
然后像这样创建不可变集

var selectedPaths = Immutable.Set(paths);
虽然
selectedPaths.first()
返回
[“a”]
,但我无法理解为什么
selectedPaths.contains([“a”])
返回
false

编辑: 嗯,我得到了一个关于为什么会发生这种情况的答案,但我仍然无法让它按我需要的方式工作


解决方案:正如@Alnitak所说,我通过比较
不可变的.List([“a”])
的路径来解决这个问题,而不是简单的数组

测试两个不同的数组是否相等,这种方法在Javascript中不起作用,例如

["a"] == ["a"] // returns false
我猜不可变JS库会做一个简单的相等性检查。不幸的是,您需要自己执行更广泛的检查。

根据,Immutable使用
Immutable.is()
函数执行相等性检查,但是
.is()
检查仅在给定其他
Immutable.
对象时执行“值比较”检查,而不是本机JS数组,对其执行“参考比较”检查


因此,请尝试将内部值存储为一个
不可变的.List
,而不是一个普通的JS数组。

那么,我应该怎么做才能得到所需的响应?请参阅我的编辑-您需要手动执行相等性检查。我不确定你到底想做什么,但是如果你想减少这个集合,你可以运行一个过滤操作并提供你自己的函数来进行比较。看到这个关于JS中数组相等性检查的问题了吗:你能提供一个例子吗?对不起,我没有合适的环境来测试
Immutable.JS
code。猜测一下,您必须使用
不可变。列表([“a”、“b”、“c”])
以前刚刚使用普通内部数组的任何位置。它仍然返回
false
毕竟,我根据您的建议设法解决了它。谢谢@XeniaSis如果您包含一个更新来说明如何操作,它可能会很有用?