Después de mucho, mucho tiempo de probar 15 funciones / métodos diferentes que se encuentran en las respuestas a estas preguntas, ahora sé cuál es el mejor (el más versátil y el más rápido).
Tomé 15 funciones / métodos de las respuestas a esta pregunta e hice un script para medir el tiempo necesario para ejecutar 100 pads. Cada pad rellenaría el número 9
con 2000
ceros. Esto puede parecer excesivo, y lo es, pero le da una buena idea sobre la escala de las funciones.
El código que utilicé se puede encontrar aquí:
https://gist.github.com/NextToNothing/6325915
Siéntase libre de modificar y probar el código usted mismo.
Para obtener el método más versátil, debe usar un bucle. Esto se debe a que con números muy grandes es probable que otros fallen, mientras que esto tendrá éxito.
Entonces, ¿qué bucle usar? Bueno, eso sería un while
bucle. Un for
bucle sigue siendo rápido, pero un while
bucle es solo un poco más rápido (un par de ms) y más limpio.
Respuestas como esas por Wilco
, Aleksandar Toplek
o Vitim.us
harán el trabajo perfectamente.
Personalmente, probé un enfoque diferente. Intenté usar una función recursiva para rellenar la cadena / número. Funcionó mejor que los métodos que se unen a una matriz pero, aún así, no funcionó tan rápido como un bucle for.
Mi funcion es:
function pad(str, max, padder) {
padder = typeof padder === "undefined" ? "0" : padder;
return str.toString().length < max ? pad(padder.toString() + str, max, padder) : str;
}
Puede usar mi función con o sin establecer la variable de relleno. Así como esto:
pad(1, 3); // Returns '001'
// - Or -
pad(1, 3, "x"); // Returns 'xx1'
Personalmente, después de mis pruebas, usaría un método con un ciclo while, como Aleksandar Toplek
o Vitim.us
. Sin embargo, lo modificaría ligeramente para que pueda establecer la cadena de relleno.
Entonces, usaría este código:
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'
También puede usarlo como una función prototipo, usando este código:
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'