JavaScript Pig拉丁元音逻辑错误,请求代码反馈

时间:2018-10-03 05:58:09

标签: javascript function slice charat

我正在研究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 :(得分:0)

您在if块中使用的条件是错误的-您正在检查str的第一个字符是否等于vowel数组本身。永远是false

再加上第二个示例中使用的条件仅仅是第一个示例的否定,它将始终为trueif块也将以元音开头的字符串运行。

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

答案 1 :(得分:0)

感谢Yaakov Ainspan和Ramya Ramanthan的澄清,并感谢我在第二个段落中发现了我的错误!

这是经过大量研究和实验后我想到的。

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而不是用方括号括起来后,问题消失了。

请告诉我我的代码是否仍然存在我无法预见的问题。 :)

注意:我知道另一条关于猪的拉丁语规则,该规则涉及以辅音开头但听起来像元音的单词(例如,我代码中的“诚实”应该是onesthay而不是诚实)。我无视那个规则。