我想创建一组不可变路径。在我的例子中,路径只是一个字符串数组。所以,让我们说我们有以下路径。
var paths = [["a"], ["a", "b", "c"]];
然后我创建像这样的不可变集
var selectedPaths = Immutable.Set(paths);
虽然selectedPaths.first()
返回["a"]
,但我无法理解为什么selectedPaths.contains(["a"])
会返回false
。
修改: 好吧,我得到了一个答案,为什么会发生这种情况,但我仍然无法让它按照我需要的方式工作。
解决方案:正如@Alnitak所述,我通过比较Immutable.List(["a"])
的路径而不是简单数组来解决这个问题
答案 0 :(得分:2)
根据the docs,Immutable使用Immutable.is()
函数执行相等性检查,但.is()
检查仅执行"值比较"检查给定的其他Immutable.*
个对象,而不是本机JS数组,它们执行"参考比较"检查。
因此,尝试将内部值存储为Immutable.List
而不是普通的JS数组。
答案 1 :(得分:0)
以这种方式测试两个不同的数组是否在Javascript中不起作用,例如
["a"] == ["a"] // returns false
我猜测Immutable JS库做了一个简单的等式检查。不幸的是,您需要自己进行更广泛的检查。