在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,