我正在一个项目中,我需要快速检查字符串中是否存在一定数量的前导零。我已经成功使用正则表达式:
var regex = new RegExp('^[0]{' + difficulty + '}.+');
if (regex.test(hash))
还要使用子字符串并重复:
if (hash.substring(0, difficulty) === '0'.repeat(difficulty))
对于我的特定目的,速度是最重要的要素。我必须找到最快的方法来检查前导零的数目是否与难度相符。我对这两种方法都进行过基准测试,但结果却以无法确定哪种更好的方式波动。另外,如果还有其他更好的方法,请告诉我。提前致谢。
最佳答案
function detect(hash, difficulty) {
for (var i = 0, b = hash.length; i < b; i ++) {
if (hash[i] !== '0') {
break;
}
}
return i === difficulty;
}
您的方法的缺点是构造中间对象并执行繁重的算术运算(尤其是使用regexp,但同时还要进行子字符串和完整字符串比较)。这个应该很快。