2016-07-13 8 views
1

Hereストリームをいくつかの境界線で多くのストリームに分割する方法が書かれています。これは.window.filterで実行されます。 いくつかの述語でストリームを分割する方法

in  a-b-c-X-d-e-f-g-h-X-i-X-j-k-l-m-n- 
out v a-b-c-X 
    v   -d-e-f-g-h-X 
    v      -i-X 
    v       -j-k-l-m-n- 

しかし、どのようにボーダーマークの前にストリーム を分割するには?

in  a-b-c-X-d-e-f-g-h-X-i-X-j-k-l-m-n- 
out v a-b-c 
    v   X-d-e-f-g-h 
    v      X-i 
    v       X-j-k-l-m-n- 
+0

「startWith」で境界マークを追加しますか? – user3743222

答えて

1

あなたが参照している答えは、出力ストリームのいずれにもマーカを実際には含まず、それらの間にあるアイテムのみです。コメントでuser3743222によって示唆されるように、あなたが出力ストリームでそれらを望んでいた場合、あなたは、単にそれらを元に戻すことができ、このような何かを:。

const marker = 'X'; 
const [ incisions, items ] = input.partition(x => x === marker); 
const streams = items.window(incisions); 
const first = streams.take(1); 
const rest = streams.skip(1); 
const whatYouWant = first.concat(rest.map(x => Rx.Observable.just(marker).concat(x))); 

しかし、windowのあまり使用オーバーロードの一つは、実際に可能ですこれを直接行う:

const closing = input.filter(x => x === 'X').share(); 
const opening = Rx.Observable.just(null).concat(closing); 
const streams = input.window(opening,() => closing); 
+0

これは公式文書になりました:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/window.md –

+0

そうです。私は私の答えからそれを削除します。 –

関連する問題