Bu soruların cevaplarında bulunan 15 farklı fonksiyon / yöntemi test eden bir, uzun, uzun bir süre sonra, hangisinin en iyi olduğunu (en çok yönlü ve en hızlı) biliyorum.
Bu sorunun cevabından 15 fonksiyon / yöntem aldım ve 100 ped yürütmek için harcanan zamanı ölçmek için bir senaryo hazırladım. Ped numarası Her ped olur 9
ile 2000
sıfır. Bu aşırı görünebilir ve öyledir, ancak işlevlerin ölçeklendirilmesi hakkında size iyi bir fikir verir.
Kullandığım kodu burada bulabilirsiniz:
https://gist.github.com/NextToNothing/6325915
Kodu kendiniz değiştirip test etmekten çekinmeyin.
En çok yönlü yöntemi elde etmek için bir döngü kullanmanız gerekir. Bunun nedeni, çok büyük sayılarda başkalarının başarısız olma olasılığıdır, oysa bu başarılı olacaktır.
Hangi döngü kullanılacak? Bu bir while
döngü olurdu . Bir for
döngü hala hızlıdır, ancakwhile
döngü biraz daha hızlı (birkaç ms) ve daha temiz.
Tarafından olduğu gibi Cevapları Wilco
, Aleksandar Toplek
yaVitim.us
mükemmel iş yapacak.
Şahsen farklı bir yaklaşım denedim. Dize / sayı pad için özyinelemeli bir işlev kullanmaya çalıştım. Bir diziye katılma yöntemlerinden daha iyi sonuç verdi, ancak yine de for döngüsü kadar hızlı çalışmadı.
Benim fonksiyonum:
function pad(str, max, padder) {
padder = typeof padder === "undefined" ? "0" : padder;
return str.toString().length < max ? pad(padder.toString() + str, max, padder) : str;
}
İşlevimi dolgu değişkenini ayarlayarak veya bu ayar olmadan kullanabilirsiniz. Şöyle böyle:
pad(1, 3); // Returns '001'
// - Or -
pad(1, 3, "x"); // Returns 'xx1'
Şahsen, testlerimden sonra, bir while döngüsüne sahip bir yöntem kullanacağım, Aleksandar Toplek
ya da Vitim.us
. Ancak, dolgu dizesini ayarlayabilmeniz için biraz değiştiririm.
Yani, bu kodu kullanırdım:
function padLeft(str, len, pad) {
pad = typeof pad === "undefined" ? "0" : pad + "";
str = str + "";
while(str.length < len) {
str = pad + str;
}
return str;
}
// Usage
padLeft(1, 3); // Returns '001'
// - Or -
padLeft(1, 3, "x"); // Returns 'xx1'
Bu kodu kullanarak bir prototip işlevi olarak da kullanabilirsiniz:
Number.prototype.padLeft = function(len, pad) {
pad = typeof pad === "undefined" ? "0" : pad + "";
var str = this + "";
while(str.length < len) {
str = pad + str;
}
return str;
}
// Usage
var num = 1;
num.padLeft(3); // Returns '001'
// - Or -
num.padLeft(3, "x"); // Returns 'xx1'