Mögliches Duplikat:
Wie kann ich einen mit Null gefüllten Wert mit JavaScript erstellen?
In JavaScript benötige ich eine Füllung.
Wenn ich zum Beispiel die Zahl 9 habe, wird sie "0009" sein. Bei einer Zahl von z. B. 10 wird es "0010" sein. Beachten Sie, dass sie immer vier Ziffern enthalten wird.
Eine Möglichkeit, dies zu tun, wäre, die Zahl minus 4 zu subtrahieren, um die Anzahl der 0en zu erhalten, die ich einsetzen muss.
Gibt es eine elegantere Möglichkeit, dies zu tun?
Bislang ist nicht viel "Gescheites" im Gange:
function pad(n, width, z) {
z = z || '0';
n = n + '';
return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}
Wenn man ein Array mit einer Zahl initialisiert, wird ein Array mit der Länge
auf diesen Wert gesetzt, so dass das Array so aussieht, als ob es so viele undefinierte
Elemente enthält. Obwohl einige Array-Instanzmethoden Array-Elemente ohne Werte überspringen, tut dies .join()
nicht, oder zumindest nicht vollständig; es behandelt sie, als ob ihr Wert die leere Zeichenkette wäre. So erhalten Sie eine Kopie des Null-Zeichens (oder was auch immer "z" ist) zwischen jedem der Array-Elemente; das ist der Grund, warum dort ein "+ 1" steht.
Beispiel für die Verwendung:
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;
}
So etwas in der Art?
Bonus unverständliche, aber geschmeidigere einzeilige ES6-Version:
let padToFour = number => number <= 9999 ? `000${number}`.slice(-4) : number;
ES6ismen:
let
ist eine blockscoped Variable (im Gegensatz zu var
's functional scoping)=>
ist eine Pfeilfunktion, die u.a. function
ersetzt und deren Parameter vorangestellt werdennumber =>
)return
beginnt, können Sie die geschweiften Klammern und das Schlüsselwort return
weglassen und einfach den folgenden Ausdruck verwendenVersuchen Sie es:
String.prototype.lpad = function(padString, length) {
var str = this;
while (str.length < length)
str = padString + str;
return str;
}
Jetzt testen:
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 gibt es eine neue Methode padStart
und padEnd
mit der folgenden Syntax.
'string'.padStart(targetLength [,padString]):
Jetzt können wir also verwenden
const str = "5";
str.padStart(4, '0'); // '0005'