Setelah, lama, lama menguji 15 fungsi / metode berbeda yang ditemukan dalam jawaban pertanyaan ini, saya sekarang tahu mana yang terbaik (yang paling fleksibel dan tercepat).
Saya mengambil 15 fungsi / metode dari jawaban pertanyaan ini dan membuat skrip untuk mengukur waktu yang diperlukan untuk menjalankan 100 pembalut. Setiap pad akan pad nomor 9
dengan 2000
nol. Ini mungkin tampak berlebihan, dan memang begitu, tetapi memberi Anda ide bagus tentang penskalaan fungsi.
Kode yang saya gunakan dapat ditemukan di sini:
https://gist.github.com/NextToNothing/6325915
Jangan ragu untuk memodifikasi dan menguji kode sendiri.
Untuk mendapatkan metode yang paling fleksibel, Anda harus menggunakan loop. Ini karena dengan jumlah yang sangat besar orang lain cenderung gagal, sedangkan, ini akan berhasil.
Jadi, loop mana yang digunakan? Nah, itu akan menjadi satu while
lingkaran. Sebuah for
loop masih cepat, tetapi while
loop hanya sedikit lebih cepat (beberapa ms) - dan bersih.
Jawaban seperti itu oleh Wilco
, Aleksandar Toplek
atau Vitim.us
akan melakukan pekerjaan dengan sempurna.
Secara pribadi, saya mencoba pendekatan yang berbeda. Saya mencoba menggunakan fungsi rekursif untuk mengisi string / angka. Itu bekerja lebih baik daripada metode bergabung dengan array tetapi, masih, tidak bekerja secepat loop for.
Fungsi saya adalah:
function pad(str, max, padder) {
padder = typeof padder === "undefined" ? "0" : padder;
return str.toString().length < max ? pad(padder.toString() + str, max, padder) : str;
}
Anda dapat menggunakan fungsi saya dengan, atau tanpa, mengatur variabel padding. Jadi seperti ini:
pad(1, 3); // Returns '001'
// - Or -
pad(1, 3, "x"); // Returns 'xx1'
Secara pribadi, setelah pengujian saya, saya akan menggunakan metode dengan loop sementara, seperti Aleksandar Toplek
atauVitim.us
. Namun, saya akan memodifikasinya sedikit sehingga Anda dapat mengatur string padding.
Jadi, saya akan menggunakan kode ini:
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'
Anda juga dapat menggunakannya sebagai fungsi prototipe, dengan menggunakan kode ini:
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'