. , NaN q1 q3 - . -1 - 0. , , .
function filterOutliers (someArray) {
if (someArray.length < 4) {
return someArray;
}
let values = someArray.slice().sort((a, b) => a - b);
let q1 = getQuantile(values, 25);
let q3 = getQuantile(values, 75);
let iqr, maxValue, minValue;
iqr = q3 - q1;
maxValue = q3 + iqr * 1.5;
minValue = q1 - iqr * 1.5;
return values.filter((x) => (x >= minValue) && (x <= maxValue));
}
function getQuantile (array, quantile) {
let index = quantile / 100.0 * (array.length - 1);
if (index % 1 === 0) {
return array[index];
} else {
let lowerIndex = Math.floor(index);
let remainder = index - lowerIndex;
return array[lowerIndex] + remainder * (array[lowerIndex + 1] - array[lowerIndex]);
}
}