2017-09-20 4 views
1

私は不変の.map()を使って、 "セグメント"のList()を反復しようとしています。Immutable.js .mapは1回の繰り返しで複数の要素を返します

各セグメントは複数の日にまたがる場合があります。このセグメントを複数のセグメントに分割したい場合は、それぞれ1日のみに分割します。

私は基本的なロジックの作業持っているように見える:

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

私の問題は.mapの戻りはセグメントのリストを返し、単一segmentedListリスト項目でそれらを移入するということです。たとえば、segment1とsegment3は1日に分割され、segment2は3日間に分割されます。

私の戻り値は、次のようになります

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

Immutable's flatMap機能は一種の私が探しているもののように聞こえるが、置き換える:

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

はしかし、これは希望されているものですflatMapを使用した上記のスニペットの.mapは、同じ結果をもたらしました。

答えて

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>

関連する問題