Среднее число из массива

Решил раскрыть стрелки для лучшего понимания кода внизу.

Где-то я допустил ошибку.

Но не могу понять, где именно.

Оригинал кода:

function getAverageAge(users) {
  return users.reduce((prev, user) => prev + user.age, 0) / users.length;
}

let vasya = { name: "Вася", age: 25 };
let petya = { name: "Петя", age: 30 };
let masha = { name: "Маша", age: 29 };

let arr = [ vasya, petya, masha ];

alert( getAverageAge(arr) ); // 28

С раскрытой функцией(Тут ошибка)

function getAverageAge(users) {
  return users.reduce(function(prev, user){
  return prev + user.age, 0;      
  }) 
}

let vasya = { name: "Вася", age: 25 };
let petya = { name: "Петя", age: 30 };
let masha = { name: "Маша", age: 29 };

let arr = [ vasya, petya, masha ];

alert( getAverageAge(arr) ); // 28


Ответы (4 шт):

Автор решения: Алексей Шиманский

, 0 относился не к той функции. Надо было к reduce как второй параметр сделать, а вы пытались вернуть значения через запятую, в числе которых был ноль

function getAverageAge(users) {
  return users.reduce(function(prev, user){
      return prev + user.age;      
  }, 0)  / users.length;
}

let vasya = { name: "Вася", age: 25 };
let petya = { name: "Петя", age: 30 };
let masha = { name: "Маша", age: 29 };

let arr = [ vasya, petya, masha ];

alert( getAverageAge(arr) ); // 28


Было:

return users.reduce(function(prev, user){return prev + user.age, 0;}) 

Стало:

return users.reduce(function(prev, user){return prev + user.age;}, 0)
→ Ссылка
Автор решения: Zhihar

у вас ошибка была со скобками в методе reduce

этот метод принимает 2 параметра, первый параметр - функция, вызывая для каждого элемента, второй параметр - начальное значение (если он не указан, то в качестве начального значения будет взять первый элемент массива)

ну и раз вы считаете среднее - то уж извольте сумму полученную разделить на кол-во элементов в массиве :)

function getAverageAge(users) {
    return users.reduce(
        function(prev, user){
            return prev + user.age;
        }, 
        0); 
}

let vasya = { name: "Вася", age: 25 };
let petya = { name: "Петя", age: 30 };
let masha = { name: "Маша", age: 29 };

let arr = [ vasya, petya, masha ];

alert( getAverageAge(arr) / arr.length ); // 28

по хорошему можно сделать такой код:

function getAverageAge(users) {
    return users.reduce(
        function(prev, user){
            return prev + user.age;
        }, 
        0) / users.length; 
}

let vasya = { name: "Вася", age: 25 };
let petya = { name: "Петя", age: 30 };
let masha = { name: "Маша", age: 29 };

let arr = [ vasya, petya, masha ];

alert(getAverageAge(arr)); // 28

→ Ссылка
Автор решения: Vadim

const getAverageAgeOpen = (u)=>{
    const als = (a)=>a.reduce((c, b)=>c + b.age, 0);
    return (als(u) / u.length) | 0;
};

const getAverageAge = (u)=>(u.reduce((c, b)=>c + b.age, 0) / u.length) | 0;

const arr = [{age: 25}, {age: 30}, {age: 29}];
console.log(getAverageAgeOpen(arr));
console.log(getAverageAge(arr));

→ Ссылка
Автор решения: Вадим Никитин
<script>
var humans = {
    vasya : {name: "Вася", age: 25},
    petya : {name: "Петя", age: 30},
    masha : {name: "Маша", age: 29}
};
var result = 0;
for(var i in humans) {
    var obj = humans[i];
    result += obj.age;
}

result = result/Object.keys(humans).length;
</script>

Округление результата уже по потребностям.

→ Ссылка