['a','b','c'].flatMap(function(e) {
return [e, e+ 'x', e+ 'y', e+ 'z' ];
});
//['a', 'ax', 'ay', 'az', 'b', 'bx', 'by', 'bz', 'c', 'cx', 'cy', 'cz']
['a','b','c'].map(function(e) {
return [e, e+ 'x', e+ 'y', e+ 'z' ];
});
//[Array[4], Array[4], Array[4]]
結果がより多くのObservableであるObservableがある場合、flatMapを使用します。
別のオブザーバブルによって生成されたオブザーバブルがある場合、データではなくオブザーバブルがあるため、フィルター、縮小、または直接マッピングすることはできません。オブザーバブルを生成する場合は、マップではなくflatMapを選択します。その後、あなたは大丈夫です。
2番目のスニペットのように、非同期操作を行う場合は、flatMapを使用する必要があります。
var source = Rx.Observable.interval(100).take(10).map(function(num){
return num+1
});
source.subscribe(function(e){
console.log(e)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.4.1/Rx.min.js"></script>
var source = Rx.Observable.interval(100).take(10).flatMap(function(num){
return Rx.Observable.timer(100).map(() => num)
});
source.subscribe(function(e){
console.log(e)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.4.1/Rx.min.js"></script>