Rellenar un número con ceros a la izquierda en JavaScript

En JavaScript, necesito tener relleno.

Por ejemplo, si tengo el número 9, será "0009". Si tengo un número de digamos 10, será "0010". Observe que siempre contendrá cuatro dígitos.

Una forma de hacerlo sería restando el número menos 4 para obtener el número de 0s que tengo que poner.

¿Existe una forma más sencilla de hacer esto?

No hay mucho "slick" hasta ahora:

function pad(n, width, z) {
  z = z || '0';
  n = n + '';
  return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}

Cuando se inicializa un array con un número, se crea un array con la longitud fijada en ese valor para que el array parezca contener ese número de elementos indefinidos. Aunque algunos métodos de instancia de Array omiten los elementos del array sin valores, .join() no lo hace, o al menos no completamente; los trata como si su valor fuera la cadena vacía. Así, se obtiene una copia del carácter cero (o lo que sea "z") entre cada uno de los elementos del array; por eso hay un + 1 ahí.

Ejemplo de uso:

pad(10, 4);      // 0010
pad(9, 4);       // 0009
pad(123, 4);     // 0123

pad(10, 4, '-'); // --10
Comentarios (14)

function padToFour(number) {
  if (number` es una función de flecha que, entre otras cosas, sustituye a `function` y se antepone a sus parámetros
 - Si una función de flecha toma un solo parámetro puede omitir los paréntesis (por lo tanto `number =>`)
 - Si el cuerpo de una función de flecha tiene una sola línea que comienza con `return` puede omitir los paréntesis y la palabra clave `return` y simplemente utilizar la expresión
 - Para reducir el cuerpo de la función a una sola línea he hecho trampa y he utilizado una expresión ternaria
Comentarios (10)

Inténtalo:

String.prototype.lpad = function(padString, length) {
    var str = this;
    while (str.length < length)
        str = padString + str;
    return str;
}

Ahora prueba:

var str = "5";
alert(str.lpad("0", 4)); //result "0005"
var str = "10"; // note this is string type
alert(str.lpad("0", 4)); //result "0010"

[DEMO][1]


En ECMAScript 8 , tenemos un nuevo método padStart y padEnd que tiene la siguiente sintaxis.

padStart(targetLength [,padString]):

Así que ahora podemos usar

const str = "5";
str.padStart(4, '0'); // '0005'
Comentarios (8)