Range Analyze
Range Analyze
by evgkch
JavaScript
/**
* Numeric array handler
*/
class Range {
/**
* Get avarage
* @param {Number[]} args
* @return {Number}
*/
static getAvarage(args) {
return args.reduce((a, b) => a + b) / args.length;
}
/**
* Get square sum - supporting method
* @param {Number[]} [first, ...rest]
* @param {Number} [avarage=Range.getAvarage([first, ...rest])]
* @return {Number}
*/
static getSquareSum([first, ...rest], avarage = Range.getAvarage([first, ...rest])) {
return [...rest].length === 0
? (avarage - first) * (avarage - first)
: (avarage - first) * (avarage - first) + Range.getSquareSum([...rest], avarage);
}
/**
* Get dispersion
* @param {Number[]} args
* @param {Number} [avarage=Range.getAvarage([first, ...rest])]
* @return {Number}
*/
static getDispersion(args, avarage = Range.getAvarage(args)) {
return Range.getSquareSum(args, avarage) / args.length;
}
/**
* Get standart deviation
* @param {Number[]} args
* @param {Number} [avarage=Range.getAvarage([first, ...rest])]
* @return {Number}
*/
static getStandartDeviation(args, avarage = Range.getAvarage(args)) {
return Math.sqrt(Range.getDispersion(args, avarage));
}
static getMin(args) {
let min;
for (let arg of args) {
if (!min || arg < min) min = arg;
}
return min;
}
static getMax(args) {
let max;
for (let arg of args) {
if (!max || arg > min) max = arg;
}
return max;
}
static invert(range) {
return Array.from(range, (v, k) => range[range.length - k - 1]);
}
/**
* Analyze range by options
* @param {Number[]} args
* @return {Object}
*/
static analyze(args, options = {}) {
const analytics = {};
analytics['length'] = args.length;
if (options.min === true) {
analytics['min'] = Range.getMin(args);
}
if (options.max === true) {
analytics['max'] = Range.getMax(args);
}
if (options.sum === true) {
...