在Rx.js中,如何将数组流转换为数组流,例如我有以下流:['0a','0b'],['1a','1b'],[' 2a','2b','2c']我希望得到以下流:
0a---1a---2a--->
0b---1b---2b--->
2c--->
是否有任何操作员可以做这样的事情,或者我应该从头开始写一个?
答案 0 :(得分:2)
这样的事情应该有效
stream.
flatMap(array =>
Rx.Observable.from(
array.map((obj, i) => {index: i, ...obj})
)
).groupBy(x => x.index, ).
subscribe(x =>
x.map((x,i) => subscribe(x))
)
答案 1 :(得分:0)
您可以使用现有的操作员相对轻松地实现它。
您想要达到的目标与此处描述的内容非常相似:RXJS: alternately combine elements of streams
它提出了两种方式:
使用Rx.Observable.zip
运算符(将一个observable数组作为参数,并发出一个数组流,其索引n处的元素是第n个observable发出的第x个值)
但是,在您的示例中应用的解决方案将停在1a,1b
,因为只要其中一个observable完成,结果observable就会完成。
通过填充虚拟值并应用Rx.Observable.zip
运算符
在这两个选项中:
.concatMap....
,您将获得一个像[0a,0b], [1a,1b], [2a,2b,2c]
这样的数组流,您可以从中轻松按索引进行映射(.map(function(array){return array[N];})
将为您提供[Na,Nb...]
获得你想要的流。.filter(function(value,index){return index % N == I})
,其中N
是流的数量,I
是您想要的流,即值为{{的流1}} 有关(Ia,Ib...)
运营商>的文档http://reactivex.io/documentation/operators/zip.html https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/zip.md,