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));
}
/**
* analyze range
* @param {number[]} [args]
* @return {{average: number, standartDeviation: number}}
*/
static analyze(args) {
const average = Range.getAvarage(args);
const standartDeviation = Range.getStandartDeviation(args, average);
return { average, standartDeviation };
}
}