Среднее число из массива
Решил раскрыть стрелки для лучшего понимания кода внизу.
Где-то я допустил ошибку.
Но не могу понять, где именно.
Оригинал кода:
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)
у вас ошибка была со скобками в методе 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
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>
Округление результата уже по потребностям.