2012-12-16 59 views
3

練習:編寫一個帶有字符的函數(即長度爲1的字符串),如果是元音則返回true,否則返回false。「檢查一個字母是否是元音」 - 函數返回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。

+3

'console.log(i);'是一個很好的起點。你會看到它被稱爲一次。 – epascarello

+0

根本不需要循環。只需使用''aeiou'.indexOf(letter)!= -1'查看我的答案瞭解更多詳細信息。 – Cerbrus

回答

0

i是在vowels,而不是當前元音迭代器當前索引,因此:

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

只有一半的答案! – epascarello

+0

鍛鍊了一種魅力 - 第一次使用for循環,因此這個錯誤將會在我的腦海中留下,足以讓我記住你的建議。謝謝。 – ShedInTheGarden

-1

簡單地利用這一點,無需遍歷東西:

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的整數)。

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

~不是按位,反轉該輸出:
-1變得0 - >假ISH值。
X(其中X爲正或0)變爲-(X+1)→真實值。

這樣,如果字母是元音,函數將返回true-ish,如果不是則返回false-ish。

如果你需要一個「嚴」布爾輸出,更換return與此:

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

!!是雙布爾NOT(所以,反轉布爾值的兩倍),這鑄就真ISH值爲true,並將虛假值(0)設置爲false

+3

我認爲這是臨界混淆。爲什麼不直接說出你的意思:'return「aeiou」.indexOf(letter)!= -1;'? – melpomene

+0

由於'〜'較短,並且它是一個微小的(不重要的)[更快](http://jsperf.com/bitwise-not-versus-1) 這就是說,不喜歡一種特定的方式來構建一個'包含'方法是沒有正當理由downvote答案。 – Cerbrus

6

不要在數組中使用for..in循環。 i是索引而非值。此外,您的代碼只會檢查字母「a」。它永遠不會進入循環的下一次迭代,因爲它在第一次迭代之後總是返回true或false。

您需要將返回false移動到循環後面,以便在它對所有元音進行檢查後才返回false。

你也應該切換到更「傳統」的環形風格。

我甚至不會進入整個「是'是'元音嗎?「問題」 :)

這裏是搞掂代碼:

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/

0

你在你的元音給定的信只比較第一個元素並返回結果。相反,你必須穿過你的整個陣列,看看你的元音是否匹配。

相關問題