计算固定流的最大值非常简单,例如:
var source = Rx.Observable.from([1,3,5,7,9,2,4,6,8]).max();
但是,这仅生成一个值(在这种情况下为9)。
到目前为止,我想生成一系列最大值,直到Observable产生新的最大值为止。因此输出将类似于[1、3、5、7、9]。
到目前为止,我的想法是将具有最大值的输出流与输入流(使用combineLatest)合并,然后比较两个值。但是,这对我来说似乎比它应该的复杂。
最佳答案
您可以通过以下方式使用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
运算符)。关于javascript - RxJS中的惯用方式来计算值流的最大值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36269382/