/** * A moving average computation */ export class MovingAverage { constructor(windowSize) { this._windowSize = windowSize; this._queue = []; this._queueSum = 0; } windowSize() { return this._windowSize; } addVector(vec) { return vec.map(this.add.bind(this)); } add(value) { this._queueSum += value; this._queue.push(value); if(this._queue.length > this._windowSize) { this._queueSum -= this._queue[0]; this._queue.shift(); } return this._queueSum / this._queue.length; } };