2016-06-09 23 views
0

我正在開發一個項目,我需要快速檢查字符串中是否存在一定數量的前導零。我一直在使用正則表達式獲得了成功:在JS中檢測前導零數的最快方法

var regex = new RegExp('^[0]{' + difficulty + '}.+'); 
if (regex.test(hash)) 

還與串並重復:

if (hash.substring(0, difficulty) === '0'.repeat(difficulty)) 

對於我特定的目的,速度是最重要的元素。我必須找到最快的方法來檢查前導零的數量是否與難度匹配。我已經對這兩種方法進行了基準測試,但結果波動的方式我不知道哪一個更好。另外,如果還有其他更好的方法,請告訴我。提前致謝。

+0

簡單循環會做到這一點 –

+0

@CallumLinington我正在循環哈希和檢查零的數量。在這種情況下,循環如何幫助檢查前導零的數量? –

+0

你可以通過字符串循環,所以你設置'i = 0;我<4;我++'所以4是你想要檢測的前導零的數量 –

回答

1
function detect(hash, difficulty) { 
    for (var i = 0, b = hash.length; i < b; i ++) { 
     if (hash[i] !== '0') { 
      break; 
     } 
    } 
    return i === difficulty; 
} 

你的方法有您構建中間對象,做重算術(尤其是正則表達式,但有子和全字符串比較和)的缺點。這個應該是相當快的。

+0

非常有幫助。平均來說,我解決這個難題的速度提高了1秒。我會盡可能接受答案。 –

+0

您聲明參數的變量會轉到頂部^(並且您應該記住哈希長度以獲得更好的性能)。 – Hydro

+0

@KlaiderKlai我接受了你的建議,但說實話這並不重要。無論如何,'.length'在所有現代瀏覽器中都被緩存,並且將'var'放入循環中會使其不易讀取。 – freakish