Javascript JS中检测前导零数的最快方法

Javascript JS中检测前导零数的最快方法,javascript,node.js,string,performance,hash,Javascript,Node.js,String,Performance,Hash,我正在做一个项目,需要快速检查字符串中是否有一定数量的前导零。我成功地使用了regex: var regex = new RegExp('^[0]{' + difficulty + '}.+'); if (regex.test(hash)) 同样使用子字符串并重复: if (hash.substring(0, difficulty) === '0'.repeat(difficulty)) 就我的特殊目的而言,速度是最重要的因素。我必须找到最快的方法来检查前导零的数量是否与难度相符。我已经对这

我正在做一个项目,需要快速检查字符串中是否有一定数量的前导零。我成功地使用了regex:

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;
}
for(var i=0,b=hash.length;i
您的方法有一些缺点,即需要构造中间对象和执行大量算术运算(尤其是使用regexp,但也需要使用子字符串和完整字符串比较)。这一个应该相当快。

函数检测(散列,难度){
if (Number(n).toString() !== n){
    console.log("leading 0 detected")
}
for(var i=0,b=hash.length;i
您的方法有一些缺点,即需要构造中间对象和执行大量算术运算(尤其是使用regexp,但也需要使用子字符串和完整字符串比较)。这个应该很快

if (Number(n).toString() !== n){
    console.log("leading 0 detected")
}
这可能不是最快的,但比编写函数更简单


这可能不是最快的,但比编写函数简单

simple for loop就可以了。您可以通过字符串进行循环,因此设置
i=0;i<4;i++
so4是要检测的前导零的数量-使用它循环。不知道它是否会更有效,但它很简单。或者如果(str.substr(0,4)=“0000”)simple for loop就可以了。您可以通过字符串进行循环,因此您可以设置
i=0;i<4;i++
so4是要检测的前导零的数量-使用它循环。不知道它是否会更有效,但它很简单。或者如果(str.substr(0,4)=“0000”)您为参数声明的变量位于顶部^(并且您应该记住哈希长度以获得更好的性能)。@KlaiderKlai我接受了您的建议,但老实说,这并不重要
.length
在所有现代浏览器中都会被缓存,将
var
s放入循环中会降低其可读性。@freakish我正在使用最新的Firefox,但它没有缓存它。。。“那就给我解释一下。”克莱德克莱说,“那是不可能的。我个人并不使用FF,但我在互联网上看到的性能测试都没有证实这一点。我认为
length
缓存甚至是标准的一部分。你在参数中声明的变量位于顶部^(你应该记住散列长度以获得更好的性能)。@KlaiderKlai我接受了你的建议,但说实话,这并不重要
.length
在所有现代浏览器中都会被缓存,将
var
s放入循环中会降低其可读性。@freakish我正在使用最新的Firefox,但它没有缓存它。。。“那就给我解释一下。”克莱德克莱说,“那是不可能的。我个人并不使用FF,但我在互联网上看到的性能测试都没有证实这一点。我认为
length
缓存甚至是标准的一部分。