Coloque um número com zeros em JavaScript

Em JavaScript, preciso de ter acolchoamento.

Por exemplo, se eu tiver o número 9, será "0009". Se eu tiver o número 10, por exemplo, será "0010". Repare como ele sempre conterá quatro dígitos.

Uma maneira de fazer isso seria subtrair o número menos 4 para obter o número de 0s que eu preciso colocar.

Existe uma maneira mais manhosa de fazer isto?

Não muito "slick" continuando até agora:

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

Quando você inicializa um array com um número, ele cria um array com o "comprimento" definido para aquele valor, de modo que o array pareça conter tantos elementos "definidos". Embora alguns métodos de instância de array saltem elementos de array sem valores, .join() doesn't, ou pelo menos não completamente; ele os trata como se seu valor fosse a string vazia. Assim você obtém uma cópia do caractere zero (ou qualquer "z" is) entre cada um dos elementos do array; isso's porque há's um + 1 lá dentro.

Exemplo de uso:

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

pad(10, 4, '-'); // --10
Comentários (14)

function padToFour(number) {
  if (number` é uma função de seta que, entre outras coisas, substitui a `função` e é preparada pelos seus parâmetros
 - Se uma função de seta toma um único parâmetro, você pode omitir os parênteses (daí `número =>`)
 - Se o corpo de uma função de seta tem uma única linha que começa com `return` você pode omitir os parênteses e a palavra-chave `return` e simplesmente utilizar a expressão
 - Para reduzir o corpo funcional a uma única linha, fiz batota e usei uma expressão ternária.
Comentários (10)

Tente:

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

Agora teste:

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"

[1] [DEMO`][1]


Em ECMAScript 8 , temos um novo método padStart e padEnd que tem a sintaxe abaixo.

' string'.padStart(targetLength [,padString]):

Então agora podemos usar

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