在Rx.js中,如何将数组流转换为数组流,例如我有以下流:['0a','0b'],['1a' “1B”],[“2A”,“2B”,“2C”]我想下面的流:将数组流转换为数组的流运算符
0a---1a---2a--->
0b---1b---2b--->
2c--->
是否有做这样的事情,任何运营商,或者我应该写一个刮?
在Rx.js中,如何将数组流转换为数组流,例如我有以下流:['0a','0b'],['1a' “1B”],[“2A”,“2B”,“2C”]我想下面的流:将数组流转换为数组的流运算符
0a---1a---2a--->
0b---1b---2b--->
2c--->
是否有做这样的事情,任何运营商,或者我应该写一个刮?
像这样的东西应该工作
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))
)
您可以通过现有的操作员相对轻松地实现它。
你想达到什么是非常相似,这里所描述的那样:RXJS: alternately combine elements of streams
,提示两种方式:
使用Rx.Observable.zip
运算符(把参数作为观测阵列和发射其索引n处的元素的流是第n个可观察到的第x个值)
然而,在您的示例中应用的解决方案将在1a,1b
处停止,因为由此产生的obse一旦观察结果完成,可行就会完成。
延长你的阵列通过虚拟值完成,并应用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
是你想要的数据流,即与值(Ia,Ib...)
文档有关zip
运营商>http://reactivex.io/documentation/operators/zip.html流https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/zip.md,