2015-09-07 16 views
9

私はRxJSを初めて使っています。私はちょうど.filter.map私が探している変更を得るために観察できることを知っています。しかし、2つを1つの関数に組み合わせる方法はありますか?地図とフィルターを組み合わせたRX方式はありますか?

+2

振り返ってみると、フィルタとマップを1回の操作として試してみる理由はほとんどありません。他の誰かが「RxJSの初心者」であり、私の質問がある場合は、これらの回答を取ってはいけません。ちょうどフィルタリングして、マップしてください。 –

答えて

22

はいあります。

FlatMap。

Observable of numbers(1,2,3,4,5、...)があり、偶数をフィルタリングしてx * 10にマッピングしたいとします。

var tenTimesEvenNumbers = numbers.flatMap(function (x) { 
    if (x % 2 === 0) { 
    return Rx.Observable.just(x * 10); 
    } else { 
    return Rx.Observable.empty(); 
    } 
}); 
+0

答えをありがとう - 私はあなたがフラットマップ上のドキュメントからこれを行うことができるとは決して認識しませんでした。私は@ paulpdaniels答えを選択していますが、それはより機能的です。 –

+0

あなたはどんな意味でもっと機能的な意味ですか? –

+1

この例では、フィルター操作は 'if'ステートメントの括弧で行う必要があります。操作に何度も適用したい共通のフィルタ関数を持っているとしますが、それでもやることはできますが、複数のif()文を書くことになります。さらに、毎回それを呼び出す必要があります。 フィルタとマップ関数を別々の引数として渡すことができる解決策がある方がはるかにクリーンです。私の考えでは、そのようなコーディングスタイルを可能にする解決策はより機能的です。 –

5

いいえありません。

しかし、1つを追加するのは簡単です。

Rx.Observable.prototype.filterMap = function (filterFn, selectorFn, context) { 

return this.filter(filterFn, context) 
     .map(selectorFn, context); 
} 
+0

ありがとうございます。私はこのようなものを加えることを避けたいと考えていましたが、将来的には時間の節約になるかもしれません。 –

関連する問題