Imbottire un numero con zeri iniziali in JavaScript

In JavaScript, ho bisogno di avere un padding.

Per esempio, se ho il numero 9, sarà "0009". Se ho un numero diciamo di 10, sarà "0010". Notate che conterrà sempre quattro cifre.

Un modo per farlo sarebbe sottrarre il numero meno 4 per ottenere il numero di 0 che devo mettere.

C'è un modo più furbo per fare questo?

Non c'è molto di "slick" in corso finora:

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 inizializzate un array con un numero, esso crea un array con la lunghezza impostata a quel valore, in modo che l'array sembri contenere quel numero di elementi non definiti. Anche se alcuni metodi di istanza di Array saltano gli elementi dell'array senza valori, .join() non lo fa, o almeno non completamente; li tratta come se il loro valore fosse la stringa vuota. Così si ottiene una copia del carattere zero (o qualunque cosa sia "z") tra ogni elemento dell'array; ecco perché c'è un + 1 lì dentro.

Esempio di utilizzo:

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

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

function padToFour(number) {
  if (number` è una funzione freccia che tra le altre cose sostituisce `function` ed è preceduta dai suoi parametri
 - Se una funzione freccia prende un singolo parametro si possono omettere le parentesi (quindi `numero =>`)
 - Se il corpo di una funzione freccia ha una singola linea che inizia con `return` si possono omettere le parentesi e la parola chiave `return` e usare semplicemente l'espressione
 - Per ridurre il corpo della funzione a una sola riga ho imbrogliato e ho usato un'espressione ternaria
Commentari (10)

Prova:

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

Ora prova:

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]


In ECMAScript 8 , abbiamo un nuovo metodo padStart e padEnd che ha la seguente sintassi.

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

Quindi ora possiamo usare

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