数学操作符
function comparer(x,y) {
if( x > y ) {
} else if( x < y ) {
return -1;
} else return 0;
}
let stream$ = Rx.Observable.of(5,4,7,-1)
在这个案例中,我们定义了 comparer
函数,它会在底层运行排序算法,我们所要做的只是帮助它判断是 大于、等于 还是 小于。还可以使用对象进行比较,概念都是一样的:
因为我们在 comparer
中声明了要比较什么属性,所以第一条数据会被留下作为结果。
sum()
操作符已经不复存在,但是我们可以使用 reducer()
来完成同样的功能,像这样:
let stream$ = Rx.Observable.of(1,2,3,4)
.reduce((accumulated, current) => accumulated + current )
同样也适用于对象,只要我们定义好 reduce()
函数应该怎么做,像这样:
RxJS 5中取消了 操作符,但是仍可以使用 reduce()
来完成同样的功能
let stream$ = Rx.Observable.of( 3, 6 ,9 )
.map( x => { return { sum : x, counter : 1 } } )
.reduce( (acc,curr) => {
return Object.assign({}, acc, { sum : acc.sum + curr.sum ,counter : acc.counter + 1 })
.map( x => x.sum / x.counter )
我承认这个实现有一点绕,一旦你理解了起初调用的 map()
,那么 reduce()
就很好理解了, 一如既往的是个好助手。