Immutable.Set.contains returns 错误

Immutable.Set.contains returns false

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

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

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

var selectedPaths = Immutable.Set(paths);

虽然selectedPaths.first()returns["a"],但我无法理解为什么selectedPaths.contains(["a"])returnsfalse.

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

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

来解决这个问题

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

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

我猜 Immutable JS 库会进行简单的相等性检查。不幸的是,您需要自己进行更广泛的检查。

根据the docs,Immutable 使用Immutable.is() 函数执行相等性检查,但是.is() 检查仅在给定其他[=12= 时执行"value comparison" 检查] 对象,而不是原生 JS 数组,它对其执行 "reference comparison" 检查。

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