为什么我的VowelCount函数没有返回正确的解决方案

Why is my VowelCount function not returning the proper solution?

本文关键字:解决方案 返回 我的 VowelCount 函数 为什么      更新时间:2023-09-26

由于某种原因,VowelCount()在有一对相邻元音的情况下只计算一个元音。例如,它把"goes"中的"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")); 

我不知道为什么,但全局搜索/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
我还更改了

,这样您就不需要将其转换为字符数组。遍历字符串得到相同的结果。

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"]

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

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