2016-04-01 25 views
0

私は、配列の配列を与えるソースを持っています。すべての配列には同じ数の要素があります。 マッピングを簡単に行うために、rxjs zip演算子を使用してソース配列を変換するにはどうすればよいですか?前もって感謝します!配列の配列にrxjs zip演算子を実装するにはどうすればいいですか?

var source = Rx.Observable.from([[1, 2, 3], ["a", "b", "c"], ["do", "re", "mi"]]); 
// I would like to transform to: 
// [[1, "a", "do"], [2, "b", "re"], [3, "c", "mi"]] 

答えて

0

あなたはジップそして、観察可能に各配列に変換することができます:

var myArrays = [ 
    [1, 2, 3], 
    ['a', 'b', 'c'], 
    ['do', 're', 'mi'] 
]; 

var myObservables = myArrays.map(xs => Rx.Observable.from(xs)); 
var zipped$ = Rx.Observable.zip(myObservables); 

zipped$.subscribe(x => console.log(x)); 

を別の方法として、あなたはArrayからObservableへの変換を見送ると配列を組み合わせることlodashのzipを使用することができます。

var zipped = _.zip(...myArrays) 
+0

ありがとうカルバン! オートコンプリート[リンク](https://github.com/Reactive-Extensions/RxJS/blob/master/examples/autocomplete/autocomplete.js)のrxjsの例に従えば、私はlodashを使ってこのように動作します: 'searcher。 これは既にサブスクリプション後です。サブスクライブ(関数(データ){var zipped = _.zip(data [1]、data [2]、data [3]); // ...}); サブスクリプションの前にどうすればいいですか?おそらく_searcher_宣言中のどこかで: 'var searcher = keyup.flatMapLatest(searchWikipedia).zip(...)' – saturnino

+0

'map'を実行することができます:' var zipped = searcher.map(data => _.zip(data (0)、data [1]、data [2]); –

+0

ああ、それを得ました!rxjs zip演算子の代わりに、ちょうどわかりやすいように配列zip関数を使う必要があります。あなたのコードは次のように書かれていなければなりません: 'var zipped = searcher.map(data => _.zip(data [1]、data [2]、data [3]);' wikipedia apiのdata [0]文字列、次の3要素はタイトル、短い説明、リンクの配列です。 ありがとう! – saturnino

関連する問題