2014-02-05 139 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)