Среднее арифметическое через reduce
Подскажите пожалуйста, как реализовать простое вычисление среднего арифметического через метод reduce(или map). Есть вот такой массив:
const data = [
{name: "Ann", age: 24},
{name: "Bred", age: 27},
{name: "Grace", age: 21},
{name: "Alex", age: 30},
{name: "Robby", age: 25}
]
Нужно написать некоторую функцию, которая сможет высчитывать средний возраст этих людей.
Моё решение:
function calcAvgAge(array) {
let sum = 0
let cnt = 0
let len = array.length
for (let i = 0; i < len; i++) {
sum += array[i].age
cnt += 1
}
return sum / cnt
}
Очень громоздкое, и возможно не шибко производительное. Как написать проще средствами JavaScript?
Ответы (2 шт):
Автор решения: Igor
→ Ссылка
const data = [
{name: "Ann", age: 24},
{name: "Bred", age: 27},
{name: "Grace", age: 21},
{name: "Alex", age: 30},
{name: "Robby", age: 25}
];
let avg = data.reduce((r,i) => r + i.age, 0) / (data.length || 1);
console.log(avg);
Автор решения: Aziz Umarov
→ Ссылка
Можно так, сразу. reduce и всё. Ответ может накопить ошибку при сложении дробей. Но ответ Игоря также не лишён изъяна. Малая вероятность переполнения присутствует.
const data = [
{name: "Ann", age: 24},
{name: "Bred", age: 27},
{name: "Grace", age: 21},
{name: "Alex", age: 30},
{name: "Robby", age: 25}
];
let avg = data.reduce((r,i) => r + i.age/data.length, 0.0);
console.log(avg);