我正在一个项目中,我需要快速检查字符串中是否存在一定数量的前导零。我已经成功使用正则表达式:

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,但同时还要进行子字符串和完整字符串比较)。这个应该很快。

08-26 13:03