我有2个嵌套结构 newState 和 newState1 。
但是当我比较他们的时候,equals()或者Immutable.is()返回 false 。这些结构中的值相同。
如何正确比较 newState 和 newState1 ?
Array
(
[7] => Array
(
[49] => 49
[41] => 41
)
[8] => Array
(
[70] => 70
[69] => 69
)
[105] => 105
[9] => 9
[10] => 10
)
JSFiddle中的代码: https://jsfiddle.net/z3xuagwm/
答案 0 :(得分:19)
似乎immutablejs不进行深度转换,所以如果你的值是对象,那么它仍然是对象。
当您在每个更新步骤中创建不同的对象时,当您相互比较时,这些对象将被视为不同,因此您还应将其转换为Immutable.Map对象,以使比较成立。
// Primitives.
var test1 = Immutable.Map({
a: 'a',
b: 'b',
c: 'c'
});
var test2 = Immutable.Map({
a: 'a',
b: 'b',
c: 'c'
});
console.log('Test primitive', test1.equals(test2)); // true
// Object
test1 = Immutable.Map({
a: 'a',
b: 'b',
c: {}
});
test2 = Immutable.Map({
a: 'a',
b: 'b',
c: {}
});
console.log('Test object', test1.equals(test2)); // false
// Its because
var a = {};
var b = {};
console.log('a === b?', a === b); // false
// Convert
test1 = Immutable.Map({
a: 'a',
b: 'b',
c: Immutable.Map({})
});
test2 = Immutable.Map({
a: 'a',
b: 'b',
c: Immutable.Map({})
});
console.log('Test converted', test1.equals(test2)); // true

<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.7.5/immutable.min.js"></script>
&#13;
答案 1 :(得分:9)
在推送函数中将Immutable.Map更改为Immutable.fromJS(如前所述 - 只有fromJS会进行深度转换,Map,List等不会):
askAndReadResponse
答案 2 :(得分:0)
如何使用JSON.stringify
?
JSON.stringify(values) !== JSON.stringify(anothervalue);
如果您知道它们不是圆形对象,并且不包含函数,我认为这是比较它们的最快方法。