Immutable.Set.contains返回false

时间:2016-01-25 14:50:40

标签: javascript immutable.js

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

var paths = [["a"], ["a", "b", "c"]];

然后我创建像这样的不可变集

var selectedPaths = Immutable.Set(paths);

虽然selectedPaths.first()返回["a"],但我无法理解为什么selectedPaths.contains(["a"])会返回false

修改: 好吧,我得到了一个答案,为什么会发生这种情况,但我仍然无法让它按照我需要的方式工作。

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

2 个答案:

答案 0 :(得分:2)

根据the docs,Immutable使用Immutable.is()函数执行相等性检查,但.is()检查仅执行"值比较"检查给定的其他Immutable.*个对象,而不是本机JS数组,它们执行"参考比较"检查。

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

答案 1 :(得分:0)

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

["a"] == ["a"] // returns false

我猜测Immutable JS库做了一个简单的等式检查。不幸的是,您需要自己进行更广泛的检查。