Moving Average With a Fixed Window
Calculate a simple moving average over a fixed window with a rolling sum, validating window size and numeric values.
Code
export function movingAverage(values: readonly number[], window: number): number[] {
if (!Array.isArray(values) || values.length === 0) {
throw new RangeError("values must be a non-empty array");
}
if (!Number.isInteger(window) || window < 1 || window > values.length) {
throw new RangeError("window must be an integer between 1 and values.length");
}
if (!values.every(Number.isFinite)) {
throw new TypeError("values must be finite numbers");
}
const result: number[] = [];
let sum = 0;
for (let index = 0; index < values.length; index += 1) {
sum += values[index];
if (index >= window) sum -= values[index - window];
if (index >= window - 1) result.push(sum / window);
}
return result;
}Report a problem with this exampleOpens a pre-filled issue on GitHub.