2016-12-19 1 views
3

時間がたつにつれて配列アイテムを放出したい(各放出の間に1秒の間隔を置いて)、すべてのアイテムが放出されたら何度も何度も繰り返す。RxJS5は時間の経過とともに配列アイテムを放出し、永遠に繰り返す

..

"1" ..

出力がある

const MY_ARRAY = ['one','two','three']; 
const item$ = Rx.Observable.interval(1000).take(MY_ARRAY.length).repeat().map(x => MY_ARRAY[x]); 
item$.subscribe(x => console.log(x)); 

おかげで、私はこれを行う方法を知っているが、私はより簡潔なものがあるかどうかを知りたいです

「two」

"t HREE」

"1"

"2"

"3"

など

EDIT:

ATOW、ここでの回答は次のように要約されています。..

const ARR = ['one', 'two', 'three']; 

// TAKE YOUR PICK THEY ALL DO THE SAME 
const item$ = Rx.Observable.interval(1000).map(i => ARR[i % ARR.length]); 
// const item$ = Rx.Observable.interval(1000).zip(ARR, (a, x) => x).repeat(); 
// const item$ = Rx.Observable.interval(1000).zip(ARR).repeat().map(x => x[1]); 
// const item$ = Rx.Observable.interval(1000).take(ARR.length).repeat().map(i => ARR[i]); 

item$.subscribe((x) => { 
    console.log(x); 
}); 

答えて

3
Observable.interval(1000).map(i => MY_ARRAY[i % MY_ARRAY.length]) 
+0

これを受け入れる。他の回答も素晴らしいですが、これは最短です(コードゴルフの優勝者)、最も読みやすいです。 RXJS演算子を完全に使用するわけではありませんが、単純な場合があります。 – danday74

+1

これは素晴らしい答えですが、私の意見では読みにくいです。チームの他のすべての開発者は、コードの内容をすぐには理解できません。だから大きなコメントを残すことを忘れないでください:) – Bazinga

+0

私はあなたのポイントを理解することができます。個人的に私にとってはもっと自然な感じです。私は、読みやすさは、チームがどのように物事をするのに使われているかに関係していると思います。 '_'演算子を使って' 'zipIterable ''を使うと、もっと複雑になるかもしれません。 – Meir

4

あなたはジップ演算子を使用することができます。

const interval$ = Rx.Observable.interval(1000); 
const items$ = Rx.Observable.from([1,2,3]); 

const itemsOverTime$ = interval$.zip(items$).repeat(); 


itemsOverTime$.subscribe(([time, val]) => { 
    console.log(val); 
    // 1 
    // 2 
    // 3 
    // 1 
    // 2 
    // 3 
}); 
+0

great answer thx – danday74

1

zipがgo-にオペレーターここにあるが、Observable.fromを使用すると、サブスクライブ上のすべての値をダンプし、値のコピーを保持するために郵便番号が必要です。これは、大規模な配列には理想的ではありません。 zipの元のIEnumerable<T>は、zipIterableとして実装されています。

const MY_ARRAY = ['one','two','three']; 
Rx.Observable.interval(1000).zipIterable(MY_ARRAY, (_, v) => v).subscribe(v => console.log(v)) 
+0

zipIterableはRXJS5の関数ではありませんか? zipIterable()をzip()に置き換えたときに動作します。私はあなたが何かをしようとしていると思います。わかりやすく理解できません。あなたの答えをありがとう – danday74

関連する問題