Компактный код вычисления среднего арифметического
Есть код, который вычисляет среднее арифметическое из произвольного количества элементов, включая вычисления из массивов.
логика: 20,30,[20,10] => (20+30+20+10)/4)
Можно ли записать данный код компактнее ? Если можно то с помощью чего?
function average() {
let res = 0;
let counts = 0;
let resObj = 0;
let isArray = 0;
let devider = 0;
for (i = 0; i < arguments.length; i++) {
if (typeof(arguments[i]) == 'object') {
isArray++
for (j = 0; j < arguments[i].length; j++) {
resObj += arguments[i][j];
counts++
}
} else if (typeof(arguments[i]) == 'number') {
res += arguments[i];
} else return console.log('Including: ', typeof(arguments[i]));
}
res += resObj;
devider = arguments.length + counts - isArray;
res /= devider
console.log('arrDevider:', counts, 'devider: ', devider, 'current result: ', res)
}
average(10, [4, 5], [20, 10])
Ответы (1 шт):
Автор решения: Pavel Grishaev
→ Ссылка
function average( ...values ){
let flat = values.flat();
return flat.reduce(( accum, val )=> accum + val ) / flat.length;
}
console.log( average(10, [4, 5], [20, 10]) );