运行 平均 rxjs 5

Running average with rxjs 5

我想用 rxjs 观察滚动平均值^5

半解

const data$ = Rx.Observable.range(1, 9);
const dataToAverage$ = data$.bufferCount(4, 1);
const movingAverage$ = dataToAverage$.map(arr =>
                       arr.reduce((acc, cur) => acc + cur) / arr.length);

我很抱歉不是 JS 编码员,这是 C# 中的答案。如果有人为我翻译,我将不胜感激。

var data = Observable.Range(1, 9);
var dataToAverage =
    data
        .Scan(new int[] { }, (a, x) => a.Take(3).StartWith(x).ToArray())
        .Select(x => x.Average());

这给出:

1 
1.5 
2 
2.5 
3.5 
4.5 
5.5 
6.5 
7.5 

我会这样做:

Observable.range(1, 9)
    .scan((acc, curr) => {
        acc.push(curr);

        if (acc.length > 4) {
            acc.shift();
        }
        return acc;
    }, [])
    .map(arr => arr.reduce((acc, current) => acc + current, 0) / arr.length)
    .subscribe(console.log);

scan()最多只收集4个项目,map()然后计算平均值。

1
1.5
2
2.5
3.5
4.5
5.5
6.5
7.5