簡體   English   中英

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"])

我希望上面會返回"Poland" ,但事實並非如此。 我假設在設置和查詢時引用類型["alex", "country"]的序列化方式不同。 關於如何實現這一目標的任何幫助都會有所幫助。 我避免手動處理數組序列化

該數組未序列化。 immutable使用實際的 object(其參考)作為鍵,使用相等運算符來比較鍵。 這意味着第一個["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序列化 arrays :

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'); }

但請記住,序列化不同的 arrays 可以產生相同的字符串:

 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()));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM