#javascript #function
Вопрос:
В польском языке большинство женских имен оканчиваются на букву «а», что помогает быстро определить пол. За исключением «Бонавентуры», которое является мужским именем.
Мне нужно написать функцию, которая расскажет:
- если мужское имя — правда
- если женское имя — ложное
- если «Бонавентура» — правда
Вот что я сделал: пример 1:
function isMaleName(name) {
let pieces = name.split("");
let last = pieces[pieces.length - 1];
if ((name = "bonawentura")) {
return true;
} else if ((last = "a")) {
return false;
} else {
return true;
}
}
2 условия выполнены:
- если мужское имя — правда
- если «Бонавентура» — правда
пример 2:
function isMaleName(name) {
let pieces = name.split("");
let last = pieces[pieces.length - 1];
if ((last = "a")) {
return false;
} else {
return true;
}
}
1 условие выполнено:
- если женское имя — ложное
Комментарии:
1. Это задания, а не проверки на равенство
2. Я предполагаю, что это, вероятно, учебное задание, но
return name === 'bonawentura' || 'a' !== name[name.length - 1];
сойдет. Анализируя его, вы, возможно, получите новые идеи.3. да @Йоши, ты прав. Это учебное задание.
4. @thinkgruen говорит, что вы используете символ присвоения
=
вместо проверок на равенство===
Ответ №1:
Вы присваиваете значение вместо того, чтобы проверять его.
Вы должны использовать name == "bonawentura"
вместо name = "bonawentura"
Ответ №2:
function isMaleName(name) {
let pieces = name.split("");
let last = pieces[pieces.length - 1];
if (name === "bonawentura") {
return true;
} else if (last === "a") {
return false;
} else {
return true;
}
}
Я думаю, что это должно выглядеть так, используйте два или три =
вместо одного =
.
Комментарии:
1. спасибо, хорошо, прямо сейчас работает. Но есть одна вещь. «бонавентура» = ложь «боНАвеНтура» = ложь, что я могу сделать, чтобы изменить это, и каждый раз, когда я пишу «Бонавентура», это будет правдой.
2. просто переключитесь
if (name === "bonawentura")
наif (name.toLowerCase() === "bonawentura")
, это должно работать3. Это работает, но все равно ооочень много кода, для чего-то, что можно сделать в одной строке (см. Мой ответ)
Ответ №3:
Вы могли бы сделать это в одной строке и поддерживать строчные/прописные/boNAweNtura :
const isMaleName = name => !name.endsWith("a") || name.toLowerCase()==="bonawentura";
console.log(isMaleName("Joe")) // true
console.log(isMaleName("Lena")) // false
console.log(isMaleName("boNAweNtura")) // true
console.log(isMaleName("David")) // true
console.log(isMaleName("Sara")) // false
Ответ №4:
Мой комментарий выше, возможно, немного вводил в заблуждение. Так что здесь в полном объеме:
function isMaleName(name) {
// convert input to lowercase
name = name.toLowerCase();
// check if it's the fixed string 'bonawentura'
return name === 'bonawentura'
// if not, check if it not ends with an 'a'.
|| 'a' !== name[name.length - 1];
}
ReFS:
Ответ №5:
Вы можете использовать =
оператор, который используется для хранения значения в переменной, но если вы используете ==
его для оператора равенства, и если вы можете использовать ===
его, это оператор идентификации
Ваша проблема в том, что:
if ((name = "bonawentura"))
if ((last = "a"))
Используйте этот код в условии if
if ((name == "bonawentura"))
if ((last == "a"))
Или
if ((name === "bonawentura"))
if ((last === "a"))
Комментарии:
1. спасибо, хорошо, прямо сейчас работает. Но есть одна вещь. «бонавентура» = ложь «боНАвеНтура» = ложь, что я могу сделать, чтобы изменить это, и каждый раз, когда я пишу «Бонавентура», это будет правдой.