为什么我的VowelCount功能没有返回正确的解决方案?

时间:2016-09-12 01:58:45

标签: javascript foreach

出于某种原因,VowelCount()仅在存在一对相邻元音的情况下才计算一个元音。例如,它将“go”中的“oe”计为一个元音。我不明白为什么会这样。无论我使用forEach函数还是for循环,它都会这样做。任何人都可以解决我的误解吗?

这是我的代码:

function VowelCount(str) { 
  var charArr = str.split('');
  var pattern = /[aeiou]/gi;
  var vowelCount = 0;
  /*
  charArr.forEach(function(char) {
    if (pattern.test(char)) {
        //console.log(char);
        vowelCount++;
    }
  }); 
  */
  for (var i = 0; i < charArr.length; i++) {
    //console.log(charArr[i]);
    if (pattern.test(charArr[i])) vowelCount++;
  }
  return vowelCount;              
}   

console.log(VowelCount("goes")); 

3 个答案:

答案 0 :(得分:1)

我不确定原因,但全局搜索/g导致e失败。您无需进行全局搜索,因为无论如何都要检查个别字符。

这是一个工作版本:

function VowelCount(str) { 
    var pattern = /[aeiou]/i;
    var vowelCount = 0;

    for (var i = 0; i < str.length; i++) {
        if (pattern.test(str[i])){
            vowelCount++;
        }
    }
    return vowelCount; 
}

console.log(VowelCount("goes")); //2

我也改了它,所以你不需要把它变成一个char数组。对字符串的预告达到了同样的目的。

答案 1 :(得分:1)

function VowelCount(subject) {
    console.log(subject.match(/[aeiou]/gi));
    // or to get the length 
    console.log(subject.match(/[aeiou]/gi).length);
}

VowelCount("goes");
//result -> ["o", "e"]

答案 2 :(得分:0)

您可以使用您的模式和match()功能来实现元音的数量。这样你就不需要循环遍历一个数组,如果匹配就得到你的计数:

var chars = 'fred is a flintstone';
var pattern = /[aeiou/gi;
var matches = chars.match(pattern);
var vowelCount = matches ? matches.length : 0;