[英]ImmutableJs - How to Retrieve Key Based On Position in Map
我正在使用不可變的Js
我的狀態對象如下所示:
export const initialToolbarState = Map({
temSelectionCtrl : Map({
temSelect : true,
}),
functionalCtrl : Map({
addEle : true,
grpSelect : true,
drawShape : true
}),
operationalCtrl : Map({
zoomIn : true,
zoomOut : true,
pan : true,
temSide : true
}),
referenceCtrl : Map({
saveCtrl : true
})
});
因此,有些帶有鍵的對象具有boolean
值。
我想在這些對象上映射(循環)並獲取它們的keys
。 boolean
值指示是否呈現key
。 Immutable讓我們使用其自定義map
函數在Map
進行map
。 因此,以下工作,但不是預期的:
// map over the initialToolbarState Map object
let ctrls = initialToolbarState.map(( eachToolbar ) => {
// map over the child Map objects like temSelectionCtrl, functionalCtrl, operationalCtrl etc
return eachToolbar.map(( eachCtrl, i ) => {
// get the key corresponding to 'eachCtrl' value
let propKey = eachToolbar.keyOf( eachCtrl );
// propKey is always the first property (1st prop) of 'eachToolbar'
console.log( propKey );
...
使用immutableJs
,是否有辦法獲取與循環內當前“ eachCtrl”值相對應的正確key
? 我可以確保i
有助於將其指向與key
匹配的正確value
嗎?
您可以在對象上再次使用.map
。 第二個參數是鍵,完整的參數簽名為(mapper (value: V, key: K, iter: this))
因此,此代碼段:
initialToolbarState.map(( eachToolbar ) => {
eachToolbar.map((value, key) => {
console.log(key, ' ==> ', value);
});
});
將記錄:
temSelect ==> true
addEle ==> true
grpSelect ==> true
drawShape ==> true
// etc…
現在,只需將您的退貨鏈接起來即可創建所需的數據結構或使用鍵進行任何操作。
另外,請重新考慮此“地圖地圖”是否是解決您所遇到問題的最佳結構。 如果您需要經常迭代,也許“地圖列表”會更好。 您不會立即讀取/更新單個項目,但是如果您的列表僅包含幾個項目,則性能不會受到影響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.