2016-03-28 36 views
0

計算最大的固定流的流的是直接的,例如:習慣的方法來計算的最大值

var source = Rx.Observable.from([1,3,5,7,9,2,4,6,8]).max(); 

然而,這僅(在這種情況下9)生成一個值。

我想生成一個迄今爲止的最大值序列,直到Observable產生一個新的最大值。所以輸出結果就像[1,3,5,7,9]。

到目前爲止,我的想法是將輸出流與最大值合併,輸入流(使用combineLatest)並比較這兩個值。然而這對我來說似乎比它應該更復雜。

+0

沒關係:我完全忽略了RxJS中的掃描運算符。將關閉/刪除這個問題。 –

+1

我認爲你不應該關閉這個問題,有人可能也忽略了掃描。另外,'scan'後面需要'distinctUntilChanged'來產生輸出。 –

回答

1

可以使用scan函數以這種方式:

function max(a,b) {return (a>b ? a : b} 

var max$ = source$.scan(max,0); 

Scan可以讓你有下面的類型On+1 = f(In+1, Sn),其中In是源流的第n個輸入的關係流,On會第n個輸出和Sn將是一個累積在序列上的值(類似於用於數組的reduce運算符)。