javascript - ImmutableJs - 如何根据 map 中的位置检索 key

标签 javascript loops key immutable.js

我正在使用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
    })
});

因此,有些对象的键具有 bool 值。

我想映射(循环)这些对象并获取它们的boolean 值决定是否渲染key。 Immutable 让我们可以使用其自定义的 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 匹配的正确

最佳答案

您可以在对象上再次使用.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…

现在只需链接您的返回即可创建您需要的数据结构或使用您的 key 执行任何操作。

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

关于javascript - ImmutableJs - 如何根据 map 中的位置检索 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43016879/

相关文章:

javascript - 许多 DOM 元素的性能与背景重复

javascript - Angular - 图像不会显示

带 float 的 Python xrange

c# - Windows 键的 SendKey 是什么

php - 在 MySQL 中使用/存储加密 key 的最佳方法是什么

javascript - 更改元素的 HTML 后,CSS 悬停状态保留在 Safari 中

javascript - 如何捕获对焦点更改时隐藏的临时层上的链接的单击

c++ - 游戏循环不工作 ncurses

java - 如何在循环中选取 ASCII 输入文件中的列

JavaScript:对象重命名键