// @data: an array of numbers
const stats = data => data.reduce(
({count, sum, mean, vari, min, max}, x) => {
const k = 1 / (count + 1)
const mean_ = mean + k * (x - mean)
const ssr_ = (count - 1) * vari + k * count * (x - mean) * (x - mean)
return {
count: count + 1
, sum: sum + x
, mean: mean_
, vari: ssr_ / Math.max(1, count)
, min: isNaN(min) || x < min ? x : min
, max: isNaN(max) || x > max ? x : max
}
}
, {count: 0, sum: 0, mean: 0, vari: 0, min: NaN, max: NaN}
)
console.log(
stats([3,4,2,2,4,3,2,2,-3,4,5])
)