# Calculating Mean, Median, Mode, Range and Percentiles with Javascript

Published: 2019-07-02 08:59:49 +0000
Categories: Javascript,

Javascript

### Description

The following functions can be used to extract statistics from an array of values in Javascript

With this set of functions it's possible to calculate

• Mean
• Median
• Mode
• Max
• Min
• Range
• 95th Percentile
• nth Percentile

### Snippet

``````/** Calculate the mean value of an array of values
*
* @arg array
* @return mixed
*/
function calcAverage(arr){
var a = arr.slice();
if (a.length){
sum = sumArr(a);
avg = sum / a.length;
return avg;
}
return false;
}

/** Extract the maximum in an array of values
*
* @arg arr - array
* @return float
*/
function calcMax(arr){
return Math.max(...arr);
}

/** Calculate the Median of an array of values
*
*/
function calcMedian(arr){
var a = arr.slice();
hf = Math.floor(a.length/2);
arr = sortArr(a);
if (a.length % 2){
return a[hf];
}else{
return (parseFloat(a[hf-1]) + parseFloat(a[hf])) / 2.0;
}

}

/** Extract the maximum in an array of values
*
* @arg arr - array
* @return float
*/
function calcMin(arr){
return Math.min(...arr);
}

/** Calculate the Modal value
*
* @arg arr - array
* @return float
*/
function calcMode(arr){
var ary = arr.slice();
t = ary.sort(function(a,b){
ary.filter(function(val){
val===a
}).length - ary.filter(function(val){
val===b
}).length});
return t.pop();
}

/** Calculate the 'q' quartile of an array of values
*
* @arg arr - array of values
* @arg q - percentile to calculate (e.g. 95)
*/
function calcQuartile(arr,q){
var a = arr.slice();
// Turn q into a decimal (e.g. 95 becomes 0.95)
q = q/100;

// Sort the array into ascending order
data = sortArr(a);

// Work out the position in the array of the percentile point
var p = ((data.length) - 1) * q;
var b = Math.floor(p);

// Work out what we rounded off (if anything)
var remainder = p - b;

// See whether that data exists directly
if (data[b+1]!==undefined){
return parseFloat(data[b]) + remainder * (parseFloat(data[b+1]) - parseFloat(data[b]));
}else{
return parseFloat(data[b]);
}
}

/** Calculate the range for a set of values
*
* @arg arr - array
* @return float
*/
function calcRange(arr){
mx = calcMax(arr);
mn = calcMin(arr);
return mx-mn;
}

/** Sum all values in an array
*
*/
function sumArr(arr){
var a = arr.slice();
return a.reduce(function(a, b) { return parseFloat(a) + parseFloat(b); });
}

/** Sort values into ascending order
*
*/
function sortArr(arr){
var ary = arr.slice();
ary.sort(function(a,b){ return parseFloat(a) - parseFloat(b);});
return ary;
}

``````

### Usage Example

``````a = [1,2,2,3,5,6,10,5,16,2,3,2];

calcRange(a);
// 15

// Calculate 95th percentile
calcQuartile(a,95);
// 12.6999999999996

// Calculate 20th percentile
calcQuartile(a,20);
// 2

calcMin(a);
// 1

calcMax(a);
// 16

calcMode(a);
// 2

calcMedian(a);
// 8

calcAverage(a);
// 4.75

``````