4

练习:编写一个函数,接收一个字符(即长度为 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。

4

6 回答 6

7

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

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

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

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

这是固定的代码:

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/

于 2012-12-16T20:42:58.557 回答
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,否则返回参数在字符串中的位置(从0to的 int string length - 1)。

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

~是一个按位非,反转该输出:
-1变成0--> 一个假值。
X(其中 X 为正或 0)变为-(X+1)--> 一个真实的值。

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

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

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

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

于 2012-12-16T20:41:30.977 回答
0

您仅将元音中的第一个元素与给定字母进行比较并返回该结果。相反,您必须遍历整个数组,看看是否有任何元音匹配。

于 2012-12-16T20:42:59.237 回答
0

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

if(letter === vowels[i]) ...
于 2012-12-16T20:38:57.973 回答
0

尝试

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

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

于 2018-09-18T12:59:37.403 回答
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);
    }
}
于 2018-08-08T12:32:42.223 回答