2012-11-14 103 views
2

下面的一些javascript代碼應該檢查它是否是這些字母之一。但是,當我輸入「Hallo」時,例如它也計數'H','L','LJavascript或者等於

woord.charAt(i) == 'a' || 'e' || 'i' || 'o' || 'u' 

我做錯了什麼?

回答

7
(woord.charAt(i) == 'a') || 'e' || 'i' || 'o' || 'u' 
// evaluates to true or 'e' 

看起來你正在嘗試寫代碼,就像你會寫一個句子一樣,在這種情況下,這個句子不能很好地翻譯。以上代碼顯示了該表達式真正發生的情況。

您需要逐個比較字符與每個字符串或編寫正則表達式。正則表達式是更緊湊,看起來像:

/[aeiou]/.test(word.charAt(i)) 
+0

感謝您的快速回答。由於我對編程非常陌生,因此無法使用我們的代碼。不過,我確實瞭解了一點。 – user1825015

+0

@ user1825015越快學習正則表達式越好,字符串解析將是一個相當大的挑戰,直到你做:) – TheZ

+0

你剛剛開始編程的第一年。希望我能快速學會這個'正則表達式'。因爲它使代碼縮短了很多。 – user1825015

1

用這個代替

var str = "My string"; 
var chr = ""; 
var nVowels = 0; 

for (pos = 0; pos < str.length; pos++){ 
    chr = str.charAt(pos).toLowerCase(); 
    if (chr == "a" || chr == "e" || chr == "i" || chr == "o" || chr == "u") 
    nVowels++; 
} 
+1

親愛的上帝......這麼多比較,你可以用toLowerCase()來避免大小寫比較。即使一個開關盒結構看起來更乾淨。 – TheZ

+0

感謝您的快速回答。我忘了在||之後加上'chr ==' – user1825015

2

嘗試使用不同的方法解決問題

var c = woord.charAt(i); 
    if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'){ 
    vowels++; 
    } 
+0

外殼問題,使用toLowerCase() – TheZ

+0

謝謝,試過這個。它確實有效,我的代碼縮短了很多。 Thanks mate – user1825015

+1

@ user1825015確保你使用'var c = woord.charAt(i).toLowerCase();'或者你不會匹配'A','E','I','O','U '如「HELLO」 – TheZ

0

基本上你應該分別檢查每個選項但這很醜陋,表現不佳。我寧願創建一個接受字符的數組,並檢查該數組中當前字符的索引。

var vowels = new Array('a', 'e', 'i', 'o'); 
var word = 'hello'; 
var vowelCount = 0; 
for(var x=0; x < word.length; x++){ 
    var ch = word.charAt(x).toLowerCase(); 
    if (vowels.indexOf(ch) > -1) 
    vowelCount++; 
}