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'));

Другие вопросы по тегам