JS — начинающий — функция isMaleName()

#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. спасибо, хорошо, прямо сейчас работает. Но есть одна вещь. «бонавентура» = ложь «боНАвеНтура» = ложь, что я могу сделать, чтобы изменить это, и каждый раз, когда я пишу «Бонавентура», это будет правдой.