gpt4 book ai didi

javascript - 每 x 毫秒计算一个平均值

转载 作者:行者123 更新时间:2023-11-30 11:35:44 25 4
gpt4 key购买 nike

我有一个发出一些数据的流。

const data$ = Rx
.Observable
.interval(500)
.map(() => Math.random() * 100)

我想计算一段时间内所有产生的值的平均值(例如每秒)

如果 data$ 流发出 -2-2-2-4|,我希望生成的流是 ---2- --3|

您将如何使用 rxjs(版本 5)做到这一点

最佳答案

bufferTime 是一种方式:

Rx.Observable
.interval(500)
.map(() => Math.random() * 100)
.do(console.log)
.bufferTime(2000)
.map(items => {
return items.reduce((acc, cur) => acc + cur, 0) / items.length;
})
.take(3)
.subscribe(val => {
console.log('mean: ' + val);
})
<script src="https://npmcdn.com/@reactivex/rxjs@5.3.1/dist/global/Rx.js"></script>

好的,Maxime 的观点是有道理的。如果您需要计算大量值的平均值,请考虑使用 windowTime:

var interval = Rx.Observable.interval(2000);

Rx.Observable
.interval(500)
.map(() => Math.random() * 100)
.do(console.log)
.window(interval)
.map(win => {
return win.reduce((acc, cur) => {
acc.count++;
acc.sum += cur;
return acc;
}, {
count: 0,
sum: 0,
});
})
.mergeAll()
.filter(val => val.count != 0)
.map(val => val.sum / val.count)
.take(3)
.subscribe(val => {
console.log('mean: ' + val);
})
<script src="https://npmcdn.com/@reactivex/rxjs@5.3.1/dist/global/Rx.js"></script>

关于javascript - 每 x 毫秒计算一个平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44486372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com