“检查一个字母是否是一个元音” - 函数返回false?

时间:2012-12-16 20:35:59

标签: javascript

练习:编写一个带字符的函数(即长度为1的字符串),如果是元音则返回true,否则返回false。

我的代码:

var findVowel = function(letter) {

var vowels = ["a", "e", "i", "o", "u"];

for(var i in vowels){

    if(letter === i){
        return true;
    } else {
        return false;
    }
}

};

findVowel("e");

我研究过高低,对我来说代码看起来好像应该但是如果给出元音,它会返回false。

6 个答案:

答案 0 :(得分:7)

不要在数组中使用for..in循环。 i是索引而不是值。此外,您的代码只会检查字母“a”。它永远不会进入循环的下一次迭代,因为它在第一次迭代后总是返回true或false。

你需要将return false移动到循环之后,这样它只有在对所有元音进行检查后才会返回false。

您还应该切换到更“传统”的for..loop风格。

我甚至不会进入整个“是''元音?”问题“:)

这是修正后的代码:

var findVowel = function(letter) {

    var vowels = ["a", "e", "i", "o", "u"];

    for(var i = 0; i < vowels.length; i++){ // don't use for...in with Arrays
        if(letter === vowels[i]){// Use array indexing instead
            return true;
         }
    }

    return false;// This is after the loop

};

尝试一下:http://jsfiddle.net/adamzr/3yhFS/

答案 1 :(得分:0)

ivowels迭代器中的当前索引,而不是当前元音,因此:

if(letter === vowels[i]) ...

答案 2 :(得分:0)

只需使用它,无需循环任何内容:

var findVowel = function(letter) {
    return "aeiou".indexOf(letter) != -1; // return if the letter is found in "aeiou"
};

或者,我个人的最爱:

var findVowel = function(letter) {
    return ~"aeiou".indexOf(letter);
};
如果在字符串中找不到参数,

.indexOf()将返回-1,否则,它会返回参数在字符串中的位置(从0string length - 1的int )。

因此,在第一个示例中,如果.indexOf()返回-1,则该字母不是元音。如果它返回任何其他值,则为。 (因此!= -1)。

~是一个按位NOT,反转该输出:
-1变为0 - &gt;虚假的价值 X(其中X为正数或0)变为-(X+1) - &gt;真实的价值。

这样,如果字母是元音,函数将返回true-ish,如果不是,则返回false-ish。

如果您需要“严格”布尔输出,请将return替换为:

return !!~"aeiou".indexOf(letter);

!!是一个双布尔NOT(因此,将布尔值反转两次),这会将True-ish值转换为true和false-ish值( 0} false

答案 3 :(得分:0)

您只将元音中的第一个元素与给定的字母进行比较并返回该结果。相反,你必须通过你的整个阵列,看看你的元音是否匹配。

答案 4 :(得分:0)

您还可以将.charAt方法和.toLowerCase方法一起使用。

function vowelChecker(x) {
    // vowelChecker will grab the first letter (character)...
    var firstChar = x.toLowerCase().charAt(0);

    // Then check if that first letter is a vowel.
    if (firstChar === "a" || firstChar === "e" || firstChar === "i" || firstChar === "o" || firstChar === "u") {
        // If so... it will log true.
        console.log(true);
    } else {
        // If not... it will log false.
        console.log(false);
    }
}

答案 5 :(得分:0)

尝试

function checkIfVowel(vowel) {  
  return /[aeiouAEIOU]/.test(vowel); 
}

此函数使用一个字符参数,并通过正则表达式检查它是否是元音,最后返回相应的值(真或假)。