2014-02-05 194 views
2

我試圖編寫一個簡單的JavaScript程序來檢查一個字母是否爲元音。問題是輸出不正確,應該說「a是元音」。將數組元素與字符比較

的Javascript:

function findvowel(letter1, vowels) { 
    var count = vowels.length; 
    for (var i = 0; i < count; i++) { 
     if (vowels[i] === letter1) { 
      var message1 = " is a vowel"; 
      document.getElementById('exercise3').innerHTML = letter1 + message1; 
     } else { 
      var message2 = " is a consonant"; 
      document.getElementById('exercise3').innerHTML = letter1 + message2; 
     } 
    } 
} 

HTML:

<script> 
    $(document).ready(function() { 
     findvowel("a",["a","e","i","o","u"]); 
    }); 
</script> 

輸出:

a is a consonant 
+0

首先,你findvowel功能不應該有一個元音參數。他們不會改變。 – Ibu

+2

'function findvowel(letter){ return [「a」,「e」,「i」,「o」,「u」]。indexOf(letter)!= -1; }' - > http://jsfiddle.net/6wnhL/1/ – adeneo

+1

@adeneo - 我們需要進一步深入:'/ [aeiou] /i.test(letter);' –

回答

2

添加break到您的循環,因此不會繼續下去。

function findvowel(letter1, vowels) { 
    var count = vowels.length; 
    for (var i = 0; i < count; i++) { 
     if (vowels[i] === letter1) { 
      var message1 = " is a vowel"; 
      document.getElementById('exercise3').innerHTML = letter1 + message1; 
      break; 
     } else { 
      var message2 = " is a consonant"; 
      document.getElementById('exercise3').innerHTML = letter1 + message2; 
     } 
    } 
} 

實際上,你可以在正常情況下使用return false;停止你的函數時,馬上元音匹配,但是break將被使用,因爲有可能是在循環後去對其他碼。

BTW:

function findvowel(letter){ 
    //thanks p.s.w.g for reminding me [] 
    return letter+" is a "+(/[aeiou]/i.test(letter)?"vowel":"constant"); 
} 
+2

那麼對於這個問題'/ [aeiou ]/i' –

+0

添加break語句修復了它。非常感謝! –

1

這是我會做什麼,使用本機的功能:

var letter = "a"; 
var isVowel = ["a","e","i","o","u"].some(function(vowel){ 
    return vowel === letter; 
}); 

Rergarding你的消息,我會嘗試這樣的:

var message = letter + (isVowel ? " is a vowel" : " is a consonant"); 
2

你正在測試在for -loop元音,每次更新輸出。所以只有當最後元音被測試的元音與輸入匹配時纔會顯示輸出。相反,你應該打出來的for -loop如果元音被找到,並且只顯示一個故障(" is a consonant")你已經測試了所有元音後您無法找到匹配:

var count = vowels.length; 
for (var i = 0; i < count; i++) { 
    if (vowels[i] === letter1) { 
     var message1 = " is a vowel"; 
     document.getElementById('exercise3').innerHTML = letter1 + message1; 
     return; 
    } 
} 

var message2 = " is a consonant"; 
document.getElementById('exercise3').innerHTML = letter1 + message2; 

但這種方法可以簡化爲:既然你已經使用jQuery,它提供了$ .inArray()

function findvowel(letter1) { 
    var isVowel = "aeiou".indexOf(letter1) > -1; 
    var message = letter1 + " is a " + (isVowel ? "vowel" : "consonant"); 
    document.getElementById('exercise3').innerHTML = message; 
} 
0

,你爲什麼不這樣做呢?

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

$(document).ready(function() { 

    var letter = 'u'; 

    var found = $.inArray(letter, vowels) > -1; 

    if(found) { 
     console.log(letter + ' is a vowel'); 
    } else { 
     console.log(letter + ' is a consonant'); 
    } 

}); 
+0

所有這些答案都可以正常工作,非常感謝! –

0

我會傳入一個對象而不是數組,並利用'in'關鍵字進行常量時間查找。無需循環。

function findvowel(letter1, vowels) { 
     if (letter1 in vowels) { 
      var message1 = " is a vowel"; 
      document.getElementById('exercise3').innerHTML = letter1 + message1; 
     } else { 
      var message2 = " is a consonant"; 
      document.getElementById('exercise3').innerHTML = letter1 + message2; 
     } 
} 

然後

var obj = {'a': true, 'e': true, 'i': true, 'o': true, 'u': true} 

然後調用它

findvowel('a', obj)