Immutable.js .map возвращает несколько элементов за одну итерацию

1

Я пытаюсь использовать Immutable .map() для перебора List() сегментов.

Каждый сегмент может охватывать несколько дней, поэтому я хотел бы разбить этот сегмент на несколько сегментов, каждый из которых охватывает только один день.

Кажется, у меня основная логическая работа:

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

Моя проблема заключается в том, что .map return вернет список сегментов и заполнит их в одном элементе списка segmentedList List. Например, скажем, сегмент 1 и сегмент 3 охватывают один день, а "segment2" - три дня.

Моя возвращаемая стоимость будет выглядеть примерно так:

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

Однако это то, что нужно:

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

Неизменяемый тип функции flatMap похож на то, что я ищу, но замена.map в приведенном выше фрагменте с помощью flatMap дала те же результаты.

Теги:
immutable.js

1 ответ

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>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню