Я пытаюсь использовать 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 дала те же результаты.
Одним из вариантов было бы просто 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>