JavaScript Pig Латинская гласная логическая ошибка, запрос кода обратной связи - PullRequest
0 голосов
/ 03 октября 2018

Я работаю над упражнением 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 ]

0 голосов
/ 04 октября 2018

Спасибо Яакову Айнспану и Раме Рамантану за разъяснения и за то, что они уловили мою ошибку во втором блоке!

Вот что я придумал после долгих исследований и экспериментов.

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 в строку вместо квадратных скобок массива.

Пожалуйста, дайте мне знать, если все еще есть проблемы с моим кодом, которые я не предвидел.:)

Примечание. Мне известно о другом законе латиноамериканских свиней, касающемся слов, начинающихся с согласного, но звучащих как гласная (например, слово «честный» в моем коде было бы единичным, а не честным).Я игнорирую это правило.

0 голосов
/ 03 октября 2018

Условие, которое вы используете в блоке 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'));
...