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 :(得分:1)
您所指的答案实际上并不包括任何输出流中的标记,只包括它们之间的项目。正如用户3743222在评论中所建议的那样,如果你想在输出流中使用它们,你可以简单地将它们放回去。像这样:
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);