javascript - ImmutableJS - 过滤嵌套 Map{List(Map{...})}

标签 javascript reactjs functional-programming immutability immutable.js

给定以下数据结构。

let hall = Map({
  tables: Map({
    t1: Map({
      playlist: List(
        Map({
          songid: 'target'
        })
      )
    }),
    t2: Map({
      playlist: List(
        Map({
          songid: 'not me'
        })
      )
    })
  })
});

如何迭代每个表(t1、t2、...)并使用 songid === 'target' 删除列表中的项目,以便最终得到:

let expected_hall = Map({
  tables: Map({
    t1: Map({
      playlist: List()
    }),
    t2: Map({
      playlist: List(
        Map({
          songid: 'not me'
        })
      )
    })
  })
});

尝试了以下方法无效:

let res = hall;
hall.get('tables').entrySeq().forEach(e => {
  res = res.updateIn(['tables', e[0], 'playlist'], list => list.filter(songinfo => songinfo.songid === 'target'));
});

// or using  hall.get('tables').map(...)

感谢所提供的所有帮助。

最佳答案

let hall = Map({
  tables: Map({
    t1: Map({
      playlist: List.of(
        Map({
          songid: 'target'
        })
      )
    }),
    t2: Map({
      playlist: List.of(
        Map({
          songid: 'not me'
        })
      )
    })
  })
});

按照你使用List的方式,应该是List.of(...)或者List([])

我会这样做:

const hall2 = hall.update("tables", tables => (
  tables.map(table => (
    table.update("playlist", playlist => playlist.filter(p => p.get("songid")!=="not me"))
  ))
));

您更新表格属性,迭代每个表格,更新播放列表属性并按每个项目过滤播放列表,以免“不是我”

关于javascript - ImmutableJS - 过滤嵌套 Map{List(Map{...})},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45631408/

相关文章:

reactjs - 如何让material-ui文本字段中的标签向右?

functional-programming - 如何在不断变化的 Rest/JSON 端点上使用 F# 类型提供程序?

list - 更快的置换生成器

javascript - 使用 Bootstrap 将 JSON 文件加载到表中

javascript - 创建一个按钮来控制 JavaScript 创建一些元素。然后,如果这些元素中的任何一个发生变化,请执行某些操作

javascript - 动画按钮以扩展到新文本

javascript - Node Js CreateWriteStream不会写入目录

reactjs - React Native SVG - 设置 SVG 宽度和高度会导致图标被截断

javascript - 如何在React js中进行多个检查选项?

javascript - JS/TS : How can I turn a factory function into a more functional pattern?