Как написать функцию, которая возвращает средний возраст пользователей одного пола?
Не могу решить задачу. Нужно создать функцию getUsersNamesInAgeRange(users, gender), которая возвращает среднее значение возраста пользователей одного пола. На данный момент смогла написать только так, но результат неверный:
function getUsersNamesInAgeRange(users, gender) {
const filteredGender = users.filter((user) => {
return user.gender === gender;
});
const ageSum = users.reduce((sum, user) => {
return sum + user.age
}, 0);
return ageSum / users.length
}
Подскажите, что я делаю не так? Заранее благодарю за ответ!
Ответы (3 шт):
Автор решения: Faraday
→ Ссылка
У вас была проблема в том, что вы после фильтрации users
всё равно использовали его же, вместо отфильтрованного filteredGender
function getUsersNamesInAgeRange(users, gender) {
const filteredGender = users.filter((user) => user.gender === gender);
if (filteredGender.length === 0) {
return 0;
}
const ageSum = filteredGender.reduce((sum, user) => sum + user.age, 0);
return ageSum / filteredGender.length;
}
Автор решения: ksa
→ Ссылка
Подскажите, что я делаю не так?
Например не стоит делать два прохода по данным... Ну и за переменными следить. ;)
const users = [
{age: 20, gender: 0},
{age: 30, gender: 1},
{age: 40, gender: 0},
{age: 10, gender: 1},
]
const gender = 1
console.log(getUsersNamesInAgeRange(users, gender))
//
function getUsersNamesInAgeRange(users, gender) {
const o = users.reduce((o, u) => {
if (u.gender === gender) {
o.count++
o.sum += u.age
}
return o
}, {count: 0, sum: 0});
return o.count ? o.sum / o.count : null
}
Автор решения: DiD
→ Ссылка
const users = [
{age: 20, gender: 0},
{age: 30, gender: 1},
{age: 40, gender: 0},
{age: 10, gender: 1},
]
console.log(
users
// Сначала фильтруем нужный гендер
.filter(val => val.gender == 1)
// Потом можно сразу посчитать среднее арифметическое
// за один проход
.reduce(
(avg,val,idx) => avg + (val.age - avg)/(idx + 1),
0
)
);