如何使用两个函数计算Javascript字符串中的元音?

如何使用两个函数计算Javascript字符串中的元音?,javascript,string,function,count,Javascript,String,Function,Count,我试图编写一个Javascript函数,通过调用该函数中的另一个函数来计算字符串中的元音,但是当我在控制台中测试它时,它返回0 这是我的第一个功能,它可以很好地识别字符串是否为元音: function isVowel(ch){ var pattern = /[aeiouAEIOU]/ return pattern.test(ch); }; 对于第二个功能,我的任何想法都不起作用。以下是我迄今为止尝试过的几个例子: 这个返回给我一个0: function countVowels(

我试图编写一个Javascript函数,通过调用该函数中的另一个函数来计算字符串中的元音,但是当我在控制台中测试它时,它返回0

这是我的第一个功能,它可以很好地识别字符串是否为元音:

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.length

i
是索引,而不是字符。它应该是:

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;iconsole.log(countvowells('forget'))
    您忘了将值0赋给i变量

    ISVOMEL的参数是字符,而不是字符串的索引

    以下是有关JS语言的信息:

    函数是元音(ch){
    变量模式=/[aeiouAEIOU]/
    回归模式检验(ch);
    }
    函数计数元音(str){
    var计数=0;
    //你忘了给i变量赋值
    对于(变量i=0;ilog(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。