javascript - Immutable.js .map 在一次迭代中返回多个元素

标签 javascript immutable.js

我正在尝试使用 Immutable 的 .map()迭代“段”的 List()

每个片段可能跨越多天,如果是这样的话,我想将这个片段分成多个片段,每个片段只跨越一天。

我似乎有基本的逻辑:

const segmentedList = nonSegmentedList.map((segment) => {
  if (spansMultipleDays(segment)) {
    return segmentByDay(segment) // returns a list
  } else {
    return segment
  }
})
return segmentedList

我的问题是 .map 的返回将返回一个段列表,并将它们填充到单个 segmentedList 列表项中。例如,假设 segment1 和 segment3 跨越一天,而“segment2”跨越三天。

我的返回值看起来像这样:

[
  {segment1},
  [{segment2a}, {segment2b}, {segment2c}],
  {segment3}
]

然而,这是我们想要的:

[
  {segment1},
  {segment2a},
  {segment2b},
  {segment2c},
  {segment3}
]

Immutable's flatMap函数听起来像我正在寻找的东西,但是用 flatMap 替换上面代码片段中的 .map 产生了相同的结果。

最佳答案

一个选择是简单地 flatten()集合,然后映射它。

const collection = Immutable.fromJS([1, 2, [3, 4, 5], 6])
collection.flatten().map(item => console.log(item))
<script src="https://unpkg.com/immutable"></script>

关于javascript - Immutable.js .map 在一次迭代中返回多个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46331215/

相关文章:

javascript - 不可变 : filtering a List of Maps

javascript - 如何检查两个 ImmutableJS Map 是否具有相同的键?

javascript - Immutable.js:如何通过指定属性值在数组中查找对象

javascript - Node.js 是否同时只执行一个上下文?

javascript - Spine.js 中的 Controller 间通信

arrays - Angular 为 2 的 Immutable.js

javascript - 如何在 Immutable.Map({}) 中更改 ImmutableList({}) 中项目的属性

javascript - Google Play Store Apache Cordova 漏洞(Cordova 版本应高于 4.1)

javascript - if else 语句反转

javascript - 运行递归超时时避免堆栈溢出