immutablejs 是否允许使用引用类型进行搜索
Does immutablejs allow searching with a reference type
我有一段代码看起来像这样
const { Map } = require('immutable@4.0.0')
let map = new Map().setIn(["user",["alex","country"]],"Poland")
map.getIn(["user",["alex","country"])
我希望以上会return"Poland"
,但事实并非如此。我相信
引用类型 ["alex", "country"]
在设置和查询时序列化不同。任何关于如何实现这一目标的帮助都会有所帮助。我避免手动处理数组序列化
数组未序列化。 immutable
使用实际对象(它的引用)作为键和相等运算符来比较键。这意味着第一个 ["alex","country"]
和第二个 ["alex","country"]
是两个不同的键。
此代码段显示了问题:
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()])
示例片段:
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()));
我有一段代码看起来像这样
const { Map } = require('immutable@4.0.0')
let map = new Map().setIn(["user",["alex","country"]],"Poland")
map.getIn(["user",["alex","country"])
我希望以上会return"Poland"
,但事实并非如此。我相信
引用类型 ["alex", "country"]
在设置和查询时序列化不同。任何关于如何实现这一目标的帮助都会有所帮助。我避免手动处理数组序列化
数组未序列化。 immutable
使用实际对象(它的引用)作为键和相等运算符来比较键。这意味着第一个 ["alex","country"]
和第二个 ["alex","country"]
是两个不同的键。
此代码段显示了问题:
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()])
示例片段:
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()));