某前端群里出了一个题目:封装一个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 }
添加回答
举报
0/150
提交
取消