Skip to content

Instantly share code, notes, and snippets.

@leeoniya
Created August 7, 2018 17:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save leeoniya/734c2d89146687c3e262b492ab024aaf to your computer and use it in GitHub Desktop.
Save leeoniya/734c2d89146687c3e262b492ab024aaf to your computer and use it in GitHub Desktop.
function stats(arr) {
arr = arr.slice().sort();
var n = arr.length;
var sum = arr.reduce((acc, val) => acc + val, 0);
var prod = arr.reduce((acc, val) => acc * val, 1);
var amean = sum / n;
var gmean = Math.pow(prod, 1 / n);
var median = n % 2 === 0 ? (arr[n / 2 - 1] + arr[n / 2]) / 2 : arr[(n - 1) / 2];
var variance = 0;
var stddev = 0;
var v1 = 0,
v2 = 0;
for (var i = 0; i < n; i++) {
var dMean = arr[i] - amean;
v1 += Math.pow(dMean, 2);
v2 += dMean;
}
v2 *= v2 / n;
variance = Math.max((v1 - v2) / (n - 1), 0);
stddev = Math.sqrt(variance);
return {
count: n,
min: Math.min.apply(Math, arr),
max: Math.max.apply(Math, arr),
sum: +sum.toFixed(2),
median: +median.toFixed(2),
amean: +amean.toFixed(2),
gmean: +gmean.toFixed(2),
variance: +variance.toFixed(2),
stddev: +stddev.toFixed(2),
};
}
var arr = [152.015,136.875,132.576,133.11,135.405,130.438,132.23,130.159,134.068,129.201];
console.log(stats(arr));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment