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 数组。
我想创建一组不可变的路径。在我的例子中,路径只是一个字符串数组。假设我们有以下路径。
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 数组。