2016-04-26 14 views
8

次の2つのイベントストリームを検討してください。すべてのイベントにタイムスタンプ/ tsおよびvalueプロパティがあります。共通のイベントプロパティで2つのイベントストリームを結合するにはどうすればよいですか?

Input stream

Iは値の適用される変換して得られた流れの中に、イベントが同じタイムスタンプを有するこれら2つのストリームを結合します。 1つのストリームに1つのタイムスタンプがない場合(下の例では黄のts=3など)、そのタイムスタンプは無視してください。

enter image description here

などxstreamrxjs等の反応性プログラミングライブラリを使用して問題を解決したいと思います。私はリアクティブプログラミングの概念にはかなり新しいですが、誰かが別の提案をしているなら私はすべて耳です。ありがとう!

+2

私はあなたのダイアグラムが大好きです!あなたの問題については、一般的には難しいですが、順序を保証できる場合(タイムスタンプの時間の関数が増える、つまり値が乱れていることを意味する場合)を除いて、ストリーム全体を見なければなりません。それ以外の場合は、おそらく 'join'演算子を使用して行うことができます – user3743222

+0

ありがとう:)おそらく、タイムスタンプは常に増加する順序で来ると仮定できます。 – hampusohlsson

+0

も、すべての値が異なるタイムスタンプを持っているといいでしょう。 – user3743222

答えて

3

combineLatestを使用して、一致するタイムスタンプを持つ組み合わせのみを渡します。他の組み合わせはnullにマップされ、後で除外します。

はここXStreamの中ソリューションです:

var streamOut = xs.combine(
    (a, b) => { 
    if (a.ts === b.ts) { 
     return {ts: a.ts, value: a.value + b.value}; 
    } else { 
     return null; 
    } 
    }, 
    streamA, streamB 
).filter(x => x !== null); 

はJSBinで実行されていることを確認してください:https://jsbin.com/saxawatuza/edit?js,console

+0

非常にきれいな溶液です。ありがとうございました! – hampusohlsson

+0

非関連のコメント、Andre、OPは 'xstream'タグを使用しました。これは' xtream'ストリーミングライブラリとは無関係です。それのために特定のタグを持っているといいですね。 – user3743222

+0

@ user3743222私は同意します –

関連する問題