Doplnenie čísla úvodnými nulami v jazyku JavaScript

V JavaScripte potrebujem mať výplň.

Napríklad, ak mám číslo 9, bude to "0009". Ak mám číslo napríklad 10, bude to "0010". Všimnite si, že bude vždy obsahovať štyri číslice.

Jedným zo spôsobov, ako to urobiť, by bolo odčítať číslo mínus 4, aby som získal počet 0, ktoré potrebujem vložiť.

Existuje nejaký šikovnejší spôsob, ako to urobiť?

Zatiaľ sa toho veľa nedeje:

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

Keď inicializujete pole číslom, vytvorí sa pole s dĺžkou nastavenou na túto hodnotu, takže sa zdá, že pole obsahuje toľko nedefinovaných prvkov. Hoci niektoré metódy inštancie poľa vynechávajú prvky poľa bez hodnôt, .join() to nerobí, alebo aspoň nie úplne; zaobchádza s nimi, akoby ich hodnotou bol prázdny reťazec. Preto sa medzi jednotlivými prvkami poľa nachádza kópia znaku nula (alebo čo to je "z"); preto je tam + 1.

Príklad použitia:

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

pad(10, 4, '-'); // --10
Komentáre (14)

function padToFour(number) {
  if (number` je šípková funkcia, ktorá okrem iného nahrádza `function` a je predradená svojim parametrom
 - Ak šípková funkcia prijíma jediný parameter, môžete vynechať zátvorky (preto `číslo =>`)
 - Ak má telo šípkovej funkcie jediný riadok, ktorý začína slovom `return`, môžete vynechať zátvorky a kľúčové slovo `return` a jednoducho použiť výraz
 - Aby som telo funkcie zúžil na jeden riadok, podviedol som a použil som trojčlenný výraz
Komentáre (10)

Skúste:

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

Teraz otestujte:

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]


V ECMAScripte 8 máme novú metódu padStart a padEnd, ktorá má nižšie uvedenú syntax.

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

Takže teraz môžeme použiť

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