JavaScript Pig Латинская гласная логическая ошибка, запрос кода обратной связи
Я работаю над упражнением Pig Latin и не понимаю, что не так с моей гласной логикой, которая делает его console.log неопределенным?
function pigLatin(str){
const vowel = ["a", "e", "i", "o", "u"];
if(str.charAt(0) == vowel) {
return str + "way";
}
}
Однако, если бы я тестировал слова, которые не начинаются с гласной, мой код работает нормально.
function pigLatin(str){
const vowel = ["a", "e", "i", "o", "u"];
if(str.charAt(0) !== vowel) {
var firstChar = str.slice(0, 1);
return str.slice(1) + firstChar + "ay";
}
}
Почему первый блок настройки кода неверен? Что я упускаю из виду или недопонимание? Спасибо.
2 ответа
Спасибо Яакову Айнспану и Раме Рамантану за разъяснения и за то, что они уловили мою ошибку во втором блоке!
Вот что я придумал после долгих исследований и экспериментов.
function pigLatin(str){
const vowel = ["a", "e", "i", "o", "u"];
const consonant = "/[^aeiou]{2,}/"
if(vowel.indexOf(str.charAt(0)) >= 0) {
return str + "way";
} else {
for (var i = 0; i < str.length; i++){
if(consonant.indexOf(str[i]) >= 0){
var firstChar = str.slice(0, i);
var multiCon = str.slice(i, str.length);
return multiCon + firstChar + "ay";
}
}
}
}
Сначала я столкнулся с той же проблемой со вторым блоком в consonant
переменная в if
строка. Оказывается, я делал ту же ошибку - проверял str в массиве. Проблема исчезла после того, как я завернул const consonant
в строке вместо массива в квадратных скобках.
Пожалуйста, дайте мне знать, если с моим кодом все еще есть проблемы, которые я не предвидел.:)
Примечание: я знаю о другом законе латиноамериканского языка, касающемся слов, которые начинаются с согласного, но звучат как гласный (например, "честный" в моем коде был бы скорее односторонним, чем честным). Я игнорирую это правило.
Условие, которое вы используете в if
блок неправильный - вы проверяете, если первый символ str
равно vowel
сам массив. Это всегда будет false
,
Плюс условие, используемое во втором примере, это просто отрицание первого, оно всегда оценивается как true
, if
Блок будет работать для строк, начинающихся также с гласных.
function pigLatin(str){
const vowel = ["a", "e", "i", "o", "u"];
if(str.charAt(0) !== vowel) {
var firstChar = str.slice(0, 1);
return str.slice(1) + firstChar + "ay";
}
}
console.log(pigLatin('arnor'))
Измените ваш код на что-то вроде ниже, чтобы проверить, если первый символ str
является членом vowels
массив:
function pigLatin(str){
const vowel = ["a", "e", "i", "o", "u"];
if(vowel.indexOf(str.charAt(0)) >= 0) {
return str + "way";
}
}
console.log(pigLatin('arnor'));
console.log(pigLatin('beorn'));