为什么循环不能识别||运营商?

时间:2014-06-02 21:29:03

标签: javascript for-loop operator-keyword

我在没有老师的情况下做运动问题,所以我要上网寻求帮助。

我正在尝试解决这个问题:

  

编写一个函数translate(),将文本翻译成“rövarspråket”。也就是说,每个辅音都加倍,并在它们之间出现“o”。例如,翻译(“这很有趣”)应该返回字符串“tothohisos isos fofunon”。

然而,当我试图区分元音和辅音时,我遇到了一个问题。这就是我所拥有的:

function translate(text){
var newText;
if (!(text.charAt(0) ==  "a" || "e" || "i" || "o" || "u")){
    newText = text.charAt(0) + "o" + text.charAt(0);
    } else {
        newText = text.charAt(0);
    }
for (var i = 0; i<text.length; i++){
    if (!(text.charAt(i) ==  "a" || "e" || "i" || "o" || "u")){
        newText += text.charAt(i) + "o" + text.charAt(i);
    } else {
        newText += text.charAt(i);
    }
} 
console.log(newText);
}

translate("hello this is"); 

有人可以解释为什么||运营商不工作?我认为这将解决我遇到的问题。

1 个答案:

答案 0 :(得分:3)

你误用了OR运算符;每个条件都需要完成。试试这个:

if (!(text.charAt(0) == "a"
    || text.charAt(0) == "e"
    || text.charAt(0) == "i"
    || text.charAt(0) == "o" 
    || text.charAt(0) == "u") ){

作为替代方案(因为这可能很快变得难以处理),您可以将元音存储在单独的数组中,然后检查给定字符是否在数组中。

var vowels = ["a", "e", "i", "o", "u"];
if(vowels.indexOf(text.charAt(0).toLowerCase()) === -1) {
    // Vanna, I'd like to buy a vowel
}
else {
    // Consonant
}