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

时间:2017-09-20 20:25:53

标签: 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会产生相同的结果。

1 个答案:

答案 0 :(得分:1)

一个选项是简单地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>