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
function padToFour(number) {
if (number<=9999) { number = ("000"+number).slice(-4); }
return number;
}
Noe sånt?
Bonus uforståelig-men-glattere ES6-versjon på én linje:
let padToFour = number => number <= 9999 ? `000${number}`.slice(-4) : number;
ES6ismer:
let
er en variabel med blokkomfang (i motsetning til var
s funksjonelle omfang).=>
er en pilfunksjon som blant annet erstatter function
og som har parametere foran seg.number =>
).return
, kan du utelate parentesene og nøkkelordet return
og bare bruke uttrykketPrø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'