优化这个用于统计字母出现次数的函数,看看你优化后的函数需要耗时几毫秒?

某前端群里出了一个题目:

封装一个charStat函数用于统计给定网址中html源代码中a-z字母(不区分大小写)出现的次数,函数返回Promise并resolve这样一个对象:key为a-z(不可乱序)、value为对应字母出现次数。

为了排除掉网络请求耗时影响,所以我们只优化console.time('ms')与console.timeEnd('ms')之间的代码,保证结果正确的前提下,通过比较输出结果中的ms:后的数值大小来评价优化结果。

执行多次,平均输出大于50ms为E(不及格),在50ms内评分为D等级方案,40ms内为C,30ms内为B,20ms内为A,10ms左右算终极方案了


以下是我的代码,通过String.prototype.replace实现,虽然比较精简但耗时较长(98.593ms),并且不及格!!!


const fetch = require('isomorphic-fetch')


function charStat (url) {

  return fetch(url)

    .then( response => response.text())

    .then( html => {

      console.time('ms')

      

      // 声明一个对象_c,并初始化key为 a-z,value 均为0

      let _c = {}, _range = ['a'.charCodeAt(), 'z'.charCodeAt()]

      for(let i = _range[0]; i <= _range[1]; i ++){

        _c[String.fromCharCode(i)] = 0

      }

      // 以下是我觉得重点需要优化的部分

      html.replace(/[a-z]/ig, i => _c[i.toLowerCase()] ++)

      

      console.timeEnd('ms')

      return _c

    })

}


charStat('http://www.sina.com.cn/').then(result => console.log(result))

输出:

ms: 98.593ms


{ a: 26200,

  b: 6756,

  c: 14579,

  d: 10298,

  e: 19402,

  f: 6689,

  g: 6065,

  h: 9945,

  i: 19735,

  j: 1633,

  k: 5128,

  l: 16053,

  m: 8322,

  n: 17747,

  o: 12169,

  p: 8371,

  q: 524,

  r: 13153,

  s: 18301,

  t: 22605,

  u: 5883,

  v: 4111,

  w: 4042,

  x: 2013,

  y: 3381,

  z: 575 }


牧羊人nacy
浏览 466回答 4
4回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript