如何使用两个函数计算Javascript字符串中的元音?
我试图编写一个Javascript函数,通过调用该函数中的另一个函数来计算字符串中的元音,但是当我在控制台中测试它时,它返回0 这是我的第一个功能,它可以很好地识别字符串是否为元音:如何使用两个函数计算Javascript字符串中的元音?,javascript,string,function,count,Javascript,String,Function,Count,我试图编写一个Javascript函数,通过调用该函数中的另一个函数来计算字符串中的元音,但是当我在控制台中测试它时,它返回0 这是我的第一个功能,它可以很好地识别字符串是否为元音: function isVowel(ch){ var pattern = /[aeiouAEIOU]/ return pattern.test(ch); }; 对于第二个功能,我的任何想法都不起作用。以下是我迄今为止尝试过的几个例子: 这个返回给我一个0: function countVowels(
function isVowel(ch){
var pattern = /[aeiouAEIOU]/
return pattern.test(ch);
};
对于第二个功能,我的任何想法都不起作用。以下是我迄今为止尝试过的几个例子:
这个返回给我一个0:
function countVowels(str){
var count = 0;
for(var i; i <= str.length; ++i){
if(isVowel(i)){
++count;
}
}
return count;
};
函数count元音(str){
var计数=0;
对于(var i;i请尝试在字符串上使用g
属性
g
:全局
i
:不区分大小写
函数count元音(ch){
返回ch.match(/[aeiouy]/gi).length;
}
var str=“我的字符串”;
alert(countvowells(str));//2尝试在字符串上使用g
属性
g
:全局
i
:不区分大小写
函数count元音(ch){
返回ch.match(/[aeiouy]/gi).length;
}
var str=“我的字符串”;
alert(countvowells(str));//2
i
是索引,而不是字符。它应该是:
if (isVowel(str[i])) {
count++;
}
另外,str.length(pattern)
是错误的。length
是一个属性,而不是一个函数,所以它应该是str.lengthi
是索引,而不是字符。它应该是:
if (isVowel(str[i])) {
count++;
}
另外,str.length(pattern)
是错误的。length
是一个属性,而不是一个函数,所以它应该是str.length虽然Robiseb答案是正确的,但我想让你知道为什么你的代码不起作用(我指的是你的第一次尝试)。基本上你在循环中犯了两个错误:
如CBroe所述,您正在将i
传递给isvouel
函数。i
是一个整数,表示循环的索引,而不是字符串中的实际字符。要获取字符,可以执行str.substr(i,1)
,这意味着“从字符串中的i
位置给我一个字符”
您没有为i
变量提供初始值。当您创建变量时,它是未定义的,因此您不能增加它
alert(count元音(“hello”);
函数计数元音(str){
var计数=0;
对于(var i=0;i虽然Robiseb答案是可行的,但我想让您知道为什么您的代码不起作用(我指的是您的第一次尝试)。基本上,您在循环中犯了两个错误:
如CBroe所述,您正在将i
传递给isvouel
函数。i
是一个整数,表示循环的索引,而不是字符串中的实际字符。要获取字符,可以执行str.substr(i,1)
,这意味着“从字符串中的i
位置给我一个字符”
您没有为i
变量提供初始值。当您创建变量时,它是未定义的,因此您不能增加它
alert(count元音(“hello”);
函数计数元音(str){
var计数=0;
对于(var i=0;i您忘记将值0赋给i变量
ISVOMEL的参数是字符,而不是字符串的索引
以下是有关JS语言的信息:
函数是元音(ch){
变量模式=/[aeiouAEIOU]/
回归模式检验(ch);
}
函数计数元音(str){
var计数=0;
//你忘了给i变量赋值
对于(变量i=0;i console.log(countvowells('forget'))
您忘了将值0赋给i变量
ISVOMEL的参数是字符,而不是字符串的索引
以下是有关JS语言的信息:
函数是元音(ch){
变量模式=/[aeiouAEIOU]/
回归模式检验(ch);
}
函数计数元音(str){
var计数=0;
//你忘了给i变量赋值
对于(变量i=0;i log(countvowells('forget'))
显然,您应该这样做:
function isVowel(c){
var lc = c.toLowerCase();
if(lc === 'y'){
return (Math.floor(Math.random() * 2) == 0);
}
return ['a','e','i','o','u'].indexOf(lc) > -1;
}
function countVowels(s){
var i = 0;
s.split('').each(function(c){
if(isVowel(c)){
i++;
}
});
return i;
}
console.log(countVowels("the quick brown fox jumps over the lazy dog"));
虽然与其他答案相比效率较低、用处较小,但至少有50%的时间返回不同计数的有趣特性,因为有时Y.显然,您应该这样做:
function isVowel(c){
var lc = c.toLowerCase();
if(lc === 'y'){
return (Math.floor(Math.random() * 2) == 0);
}
return ['a','e','i','o','u'].indexOf(lc) > -1;
}
function countVowels(s){
var i = 0;
s.split('').each(function(c){
if(isVowel(c)){
i++;
}
});
return i;
}
console.log(countVowels("the quick brown fox jumps over the lazy dog"));
它虽然不如其他答案有效,也不太有用,但至少有50%的时间返回不同的计数,因为有时Y。祝“有时Y”好运。只需使用str.match(/[aeiou]/gi)。length
“这一个给我返回0”-当然是这样,因为您只将循环计数器i
传递给isvowell
-所以您要检查0
是否是元音,1
是否是元音,等等。数字不是元音,所以结果当然是0。祝您“有时y”好运。只需使用str.match(/[aeiou]/gi)。length
。“这一个给我返回一个0”-当然是这样,因为你只是将循环计数器i
传递给isvowell
-所以你要检查0
是否是一个元音,1
是否是一个元音,等等。数字不是元音,所以结果当然是0。