#javascript
#javascript
Вопрос:
Я практикуюсь в javascript reduce (), и у меня есть массив объектов только со свойствами name и gender. Я создаю функцию и использовал reduce(), чтобы получить гендеры и создать новый объект, подобный этому — male: 2, female: 3 Я получаю
script.js:67 Неперехваченная ошибка типа: не удается создать свойство ‘female’ для числа ‘1’
когда я пытаюсь его запустить. Вот мой код. Любая помощь или толчок в правильном направлении были бы очень полезны!! Большое вам спасибо.
function genderCount(obj) {
return obj.reduce((acc, curVal) => {
if (curVal.gender === 'Male') {
return acc.male = acc.male 1;
}
return acc.female = acc.female 1;
}, {male: 0, female: 0});
}
Комментарии:
1. Поместите
return
под присваиванием и выполнитеreturn acc
. Это потому, чтоacc
на каждой следующей итерации всегда является значением, возвращаемым на последней итерации.2. Большое вам спасибо!!
3. Вы также можете сократить его с помощью
const isMale = curVal.gender === "Male"; return {male: acc.male isMale, female: acc.female !isMale}
Это потому, чтоtrue
преобразует в1
иfalse
преобразует в0
.
Ответ №1:
Попробуйте это:
function genderCount(obj) {
return obj.reduce((acc, curVal) => {
if (curVal.gender === 'Male') {
acc.male ;
}
else {
acc.female ;
}
return acc;
}, {male: 0, female: 0});
}
Комментарии:
1. Аааа!!! Теперь я вижу. Большое вам спасибо за вашу помощь. Спасибо!!!
Ответ №2:
Попробуйте
function genderCount (obj) {
return obj.reduce((acc, curVal) => {
if (curVal.gender === 'Male') {
acc.male = 1;
} else {
acc.female = 1;
}
return acc;
}, {male: 0, female: 0});
}
console.log(genderCount( [{'gender':"Male"},{'gender':"Male"},{'gender':"female"},{'gender':"female"},{'gender':"Male"},{'gender':"Male"}] ));
Комментарии:
1. Большое вам спасибо за всю вашу помощь. Спасибо!!!
Ответ №3:
Вот альтернативный способ, который фактически позволяет вам возвращать количество вместо объекта.
function genderCount (obj) {
const male = obj.reduce((sum, curVal) =>
sum (curVal.gender === 'Male')
, 0);
return {male, female: obj.length-male}
}
console.log(genderCount( [{'gender':"Male"},{'gender':"Male"},{'gender':"female"},{'gender':"female"},{'gender':"Male"},{'gender':"Male"}] ));
Поскольку пол всегда один или другой, вам действительно нужно посчитать только один, чтобы вычислить, каким будет другой.
Итак, мы подсчитываем, сколько там мужчин, затем вычитаем этот результат из общей длины массива, чтобы получить количество женщин.
Он также использует преобразования типов JS для преобразования результата (curVal.gender === 'Male')
в числовое значение, 1
если true
, 0
если false
.
Комментарии:
1. Это потрясающе круто!! Спасибо за вашу помощь.