Среднее арифметическое через 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);

→ Ссылка