Après un long, très long test de 15 fonctions / méthodes différentes trouvées dans les réponses à ces questions, je sais maintenant laquelle est la meilleure (la plus polyvalente et la plus rapide).
J'ai pris 15 fonctions / méthodes à partir des réponses à cette question et fait un script pour mesurer le temps nécessaire pour exécuter 100 pads. Chaque pavé remplirait le nombre 9
de 2000
zéros. Cela peut sembler excessif, et c'est le cas, mais cela vous donne une bonne idée de la mise à l'échelle des fonctions.
Le code que j'ai utilisé se trouve ici:
https://gist.github.com/NextToNothing/6325915
N'hésitez pas à modifier et tester le code vous-même.
Afin d'obtenir la méthode la plus polyvalente, vous devez utiliser une boucle. En effet, avec un très grand nombre, d'autres sont susceptibles d'échouer, alors que cela réussira.
Alors, quelle boucle utiliser? Eh bien, ce serait une while
boucle. Une for
boucle est toujours rapide, mais une while
boucle est juste un peu plus rapide (quelques ms) - et plus propre.
Des réponses comme celles de Wilco
, Aleksandar Toplek
ou Vitim.us
feront parfaitement l'affaire.
Personnellement, j'ai essayé une approche différente. J'ai essayé d'utiliser une fonction récursive pour remplir la chaîne / le nombre. Cela fonctionnait mieux que les méthodes joignant un tableau mais, toujours, ne fonctionnait pas aussi rapidement qu'une boucle for.
Ma fonction est:
function pad(str, max, padder) {
padder = typeof padder === "undefined" ? "0" : padder;
return str.toString().length < max ? pad(padder.toString() + str, max, padder) : str;
}
Vous pouvez utiliser ma fonction avec ou sans définir la variable de remplissage. Alors comme ça:
pad(1, 3); // Returns '001'
// - Or -
pad(1, 3, "x"); // Returns 'xx1'
Personnellement, après mes tests, j'utiliserais une méthode avec une boucle while, comme Aleksandar Toplek
ou Vitim.us
. Cependant, je le modifierais légèrement pour que vous puissiez définir la chaîne de remplissage.
Donc, j'utiliserais ce code:
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'
Vous pouvez également l'utiliser comme fonction prototype, en utilisant ce code:
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'