计算固定流的最大值非常简单,例如:

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/

10-16 17:57