运行 平均 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);
- 上面的代码工作正常,除了它平均的第一个数据数组是
1,2,3,4
.
- 我怎样才能对
1
和 1,2
以及 1,2,3
进行平均?
- 在https://jsfiddle.net/KristjanLaane/kLskp71j/
玩一玩
我很抱歉不是 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
我想用 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);
- 上面的代码工作正常,除了它平均的第一个数据数组是
1,2,3,4
. - 我怎样才能对
1
和1,2
以及1,2,3
进行平均? - 在https://jsfiddle.net/KristjanLaane/kLskp71j/ 玩一玩
我很抱歉不是 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