Fyll inn et tall med ledende nuller i JavaScript

I JavaScript må jeg ha utfylling.

Hvis jeg for eksempel har tallet 9, blir det "0009". Hvis jeg har et tall på for eksempel 10, blir det "0010". Legg merke til hvordan det alltid vil inneholde fire sifre.

En måte å gjøre dette på ville være å trekke tallet minus 4 for å få antall 0-er jeg trenger å sette.

Finnes det en smartere måte å gjøre dette på?

Det er ikke mye "glatt" som skjer så langt:

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

Når du initialiserer en matrise med et tall, oppretter den en matrise med lengden satt til den verdien, slik at matrisen ser ut til å inneholde så mange udefinerte elementer. Selv om noen Array forekomst metoder hoppe over array elementer uten verdier, .join() ikke, eller i det minste ikke helt; det behandler dem som om deres verdi er den tomme strengen. Dermed får du en kopi av null-tegnet (eller hva "z" er) mellom hvert av array-elementene; det er derfor det er en + 1 der inne.

Eksempel på bruk:

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

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

function padToFour(number) {
  if (number` er en pilfunksjon som blant annet erstatter `function` og som har parametere foran seg.
 - Hvis en pilfunksjon tar en enkelt parameter, kan du utelate parentesene (derav `number =>`).
 - Hvis en pilfunksjons kropp har en enkelt linje som begynner med `return`, kan du utelate parentesene og nøkkelordet `return` og bare bruke uttrykket
 - For å få funksjonskroppen ned til en enkelt linje jukset jeg og brukte et ternært uttrykk
Kommentarer (10)

Prøv:

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

Test nå:

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]


I ECMAScript 8 har vi en ny metode padStart og padEnd som har nedenstående syntaks.

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

Så nå kan vi bruke

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