这个javascript代码应该接受一个字符串并返回数组中元音的数量,但是当我运行它时,我得到一条消息,我的s.split不是一个函数。有谁知道我做错了什么?
function countVowels(s){
var vowels = /[aeiou]/i;
var count = 0
var array = s.split('');
array.forEach(function(v){
if(v == vowels)
count++;
})
return count;
}
答案 0 :(得分:1)
我收到一条消息,说我的s.split不是函数。
split()
方法通过将字符串分隔为子字符串,将 String 对象拆分为字符串数组。
因此,如果param不是字符串类型(如'abcdef'),它会让你遇到这个问题。
当v === vowels
是正则表达式时,您不应该使用vowels
。当您使用===
时,您试图比较v
和vowels
是否是同一个对象。有关详细信息,请参阅Equality comparisons and sameness。
只要您想知道字符串中是否找到模式,请使用
test()
。
function countVowels(s) {
var vowels = /[aeiou]/i;
var count = 0;
var array = s.split('');
array.forEach(function(v) {
if (vowels.test(v)) {
count++;
}
});
return count;
}
console.log(countVowels('abcdefg'));
答案 1 :(得分:0)
最重要的是:s
必须是字符串,否则s.split
将不存在。
此外,正如其他人所说,您的测试将无效,因为v == vowels
会尝试将字符串等同于正则表达式。您想要使用RegExp.prototype.test()方法:
if(vowels.test(v)) { ... }
最后,有一种更简洁的方法来计算字符串中的元音。您可以使用String.prototype.match()返回所有匹配项并使用该数组的长度:
function countVowels(str) {
return str.match(/[aeiou]/gi).length;
}