如何改善此元音计数器功能以获得更高的效率?

时间:2019-06-03 20:14:45

标签: javascript

此代码有效,但我想知道是否有可能收到有关如何使此函数运行更快的建议。

我使用了正则表达式以及match方法,因为它们对我来说似乎很简单。

const vowelCount = str => {
  let vowels = /[aeiou]/gi;
  let result = str.match(vowels);
  let count = result.length;

  console.log(count);
};

该函数将显示字符串中的元音数量。

1 个答案:

答案 0 :(得分:2)

简单的for循环或foreach速度稍快,但它很小,因此您搬到这里并没有看到太多好处。

不过,这里有一些更快的选择。

您的代码(定时):〜0.185毫秒

const vowelCount = str => {
  let vowels = /[aeiou]/gi;
  let result = str.match(vowels);
  return result.length;
};

var t0 = performance.now();
vowelCount("aSdDDDdasDD");
var t1 = performance.now();
console.log("Call took: " + (t1 - t0) + " MS");


前循环(定时):〜.070毫秒

const vowelCount = str => {
    var vowels = 'aeiouAEIOU';
    var count = 0;
    for(var x = 0; x < str.length ; x++) {
       if (vowels.indexOf(str[x]) !== -1){
          count += 1;
       }
    }
    return count;
};

var t3 = performance.now();
vowelCount("aSdDDDdasDD");
var t4 = performance.now();

console.log("Call took: " + (t4 - t3) + " MS");


每次(定时):〜.074毫秒

const vowelCount = str => {
    var vowels = 'aeiouAEIOU';
    var count = 0;
    Array.from(str).forEach((c) => {
        if(vowels.indexOf(c)) {
           count++;
        }
    });
    return count;
};

var t3 = performance.now();
vowelCount("aSdDDDdasDD");
var t4 = performance.now();

console.log("Call took: " + (t4 - t3) + " MS");