UNPKG

moving-averages-js

Version:

The FinTech utility collections of simple, cumulative, and exponential moving averages.

52 lines (38 loc) 814 B
// simple moving average import { isNumber } from "./common"; export default (data: number[], size: number): number[] | number => { const length = data.length; if (!size) { return data.reduce((a, b) => a + b) / length; } if (size <= 1) { return data.slice(); } if (size > length) { return Array(length); } const prepare = size - 1; const ret = []; let sum = 0; let i = 0; let counter = 0; let datum; for (; i < length && counter < prepare; i++) { datum = data[i]; if (isNumber(datum)) { sum += datum; counter++; } } for (; i < length; i++) { datum = data[i]; if (isNumber(datum)) { sum += datum; } if (isNumber(data[i - size])) { sum -= data[i - size]; } ret[i] = sum / size; } return ret; };