为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

牧羊人nacy 2019-03-06 14:15:11
某前端群里出了一个题目:封装一个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 }
查看完整描述

4 回答

  • 4 回答
  • 0 关注
  • 465 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信