数组未序列化。 immutable 使用实际对象(其引用)作为键,使用等号运算符来比较键。这意味着第一个 ["alex","country"] 和第二个 ["alex","country"] 是两个不同的键。
这个sn-p显示了问题:
if (['alex', 'country'] !== ['alex', 'country']) {
console.log('The references are different');
}
我有 3 个解决方案:
1.将引用存储在变量中
您可以将数组的引用存储在变量中以将其用作键:
const { Map } = require('immutable');
const arr = ['alex', 'country'];
let map = new Map().setIn(['user', arr], 'Poland');
console.log(map.getIn(['user', arr]));
2。使用toString序列化数组
另一种解决方案是使用toString 序列化数组:
const { Map } = require('immutable@4.0.0')
let map = new Map().setIn(["user",["alex","country"].toString()],"Poland")
map.getIn(["user",["alex","country"].toString()])
示例 sn-p:
if (['alex', 'country'].toString() === ['alex', 'country'].toString()) {
console.log('The serialized arrays are equal');
}
但请记住,序列化不同的数组可以产生相同的字符串:
if (['alex', 'country'].toString() === ['alex,country'].toString()) {
console.log('Serializing different arrays can yield the same string');
}
3.展平数组
另一种方法是将路径数组展平:
const { Map } = require('immutable');
let map = new Map().setIn(['user', ['alex', 'country']].flat(), 'Poland');
console.log(map.getIn(['user', ['alex', 'country']].flat()));