簡體   English   中英

ImmutableJs-如何根據地圖中的位置檢索密鑰

[英]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.

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