【问题标题】:ImmutableJs - How to Retrieve Key Based On Position in MapImmutableJs - 如何根据地图中的位置检索密钥
【发布时间】:2017-03-25 13:22:16
【问题描述】:

我正在使用immutableJs

我的状态对象如下所示:

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 值。

我想映射(循环)这些对象并获取它们的keysboolean 值告诉是否渲染 key。 Immutable 允许我们使用其自定义的map 函数映射Maps。因此,以下工作,但并非按预期工作:

// 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 吗?

【问题讨论】:

    标签: javascript loops key immutable.js


    【解决方案1】:

    您可以在对象上再次使用.map。第二个参数是密钥,完整的参数签名是(mapper (value: V, key: K, iter: this))

    所以,这个sn-p:

    initialToolbarState.map(( eachToolbar ) => {
      eachToolbar.map((value, key) => {
        console.log(key, ' ==> ', value);
      });
    });
    

    将记录:

    temSelect  ==>  true
    addEle  ==>  true
    grpSelect  ==>  true
    drawShape  ==>  true
    // etc…
    

    现在只需链接您的回报以创建您需要的数据结构或使用您的键做任何事情。

    另外,请重新考虑这个“地图的地图”是否是您正在解决的问题的最佳结构。如果您需要经常迭代,也许“地图列表” 会更好。您不会对单个项目进行即时读取/更新,但如果您的列表仅包含几个项目,那么性能不会受到影响。

    【讨论】:

    • 感谢您抽出宝贵时间回复。我最终进行了重组,因为我认为这种结构不够灵活。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多