Dopo un lungo, lungo periodo di test di 15 diverse funzioni / metodi trovati nelle risposte a queste domande, ora so qual è il migliore (il più versatile e il più veloce).
Ho preso 15 funzioni / metodi dalle risposte a questa domanda e ho creato uno script per misurare il tempo impiegato per eseguire 100 pad. Ogni pad riempirebbe il numero 9di 2000zeri. Questo può sembrare eccessivo, e lo è, ma ti dà una buona idea sul ridimensionamento delle funzioni.
Il codice che ho usato può essere trovato qui:
https://gist.github.com/NextToNothing/6325915
Sentiti libero di modificare e testare il codice tu stesso.
Per ottenere il metodo più versatile, devi utilizzare un ciclo. Questo perché con numeri molto grandi è probabile che altri falliscano, mentre ciò avrà successo.
Quindi, quale loop usare? Bene, sarebbe un whileciclo. Un forloop è ancora veloce, ma un whileloop è solo leggermente più veloce (un paio di ms) - e più pulito.
Risposte come quelle di Wilco, Aleksandar Topleko Vitim.usfaranno perfettamente il lavoro.
Personalmente, ho provato un approccio diverso. Ho provato a usare una funzione ricorsiva per riempire la stringa / numero. Ha funzionato meglio dei metodi che si uniscono ad un array ma, comunque, non ha funzionato velocemente come un ciclo for.
La mia funzione è:
function pad(str, max, padder) {
padder = typeof padder === "undefined" ? "0" : padder;
return str.toString().length < max ? pad(padder.toString() + str, max, padder) : str;
}
Puoi usare la mia funzione con o senza l'impostazione della variabile padding. Quindi in questo modo:
pad(1, 3); // Returns '001'
// - Or -
pad(1, 3, "x"); // Returns 'xx1'
Personalmente, dopo i miei test, userei un metodo con un ciclo while, come Aleksandar Topleko Vitim.us. Tuttavia, lo modificherei leggermente in modo da poter impostare la stringa di riempimento.
Quindi, vorrei usare questo codice:
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'
Puoi anche usarlo come funzione prototipo, usando questo codice:
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'