2015-12-12 117 views
3

在Rx.js中,如何將數組流轉換爲數組流,例如我有以下流:['0a','0b'],['1a' 「1B」],[「2A」,「2B」,「2C」]我想下面的流:將數組流轉換爲數組的流運算符

0a---1a---2a---> 
0b---1b---2b---> 
      2c---> 

是否有做這樣的事情,任何運營商,或者我應該寫一個刮?

回答

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)) 
) 
0

您可以通過現有的操作員相對輕鬆地實現它。

你想達到什麼是非常相似,這裏所描述的那樣:RXJS: alternately combine elements of streams

,提示兩種方式:

  1. 使用Rx.Observable.zip運算符(把參數作爲觀測陣列和發射其索引n處的元素的流是第n個可觀察到的第x個值)

    然而,在您的示例中應用的解決方案將在1a,1b處停止,因爲由此產生的obse一旦觀察結果完成,可行就會完成。

  2. 延長你的陣列通過虛擬值完成,並應用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.htmlhttps://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/zip.md