584 Stimmen

Wie kann ich einen Wert mit führenden Nullen auffüllen?

Was ist der empfohlene Weg, um einen Wert in JavaScript mit Nullen zu füllen? Ich kann mir vorstellen, dass ich eine benutzerdefinierte Funktion zum Auffüllen von Nullen auf einen eingegebenen Wert bauen könnte, aber ich frage mich, ob es einen direkteren Weg gibt, dies zu tun?

Anmerkung: Mit "zerofilled" meine ich es im Sinne des Wortes in der Datenbank (wo eine 6-stellige zerofilled Darstellung der Zahl 5 "000005" wäre).

17voto

juFo Punkte 16511

ECMAScript 2017: verwenden padStart o padEnd

'abc'.padStart(10);         // "       abc"
'abc'.padStart(10, "foo");  // "foofoofabc"
'abc'.padStart(6,"123465"); // "123abc"

Mehr Informationen:

14voto

broofa Punkte 36174

Ich bin spät dran, aber ich verwende dieses Konstrukt oft, um Ad-hoc-Auffüllungen von gewissem Wert vorzunehmen n ist bekanntlich eine positive Dezimalzahl:

(offset + n + '').substr(1);

offset beträgt 10^^Ziffern.

Z.B. Auffüllen auf 5 Ziffern, wenn n = 123:

(1e5 + 123 + '').substr(1); // => 00123

Die hexidezimale Version ist etwas ausführlicher:

(0x100000 + 0x123).toString(16).substr(1); // => 00123

Anmerkung 1: Mir gefällt auch die Lösung von @profitehlolz, die die String-Version davon ist und die raffinierte Negativ-Index-Funktion von slice() verwendet.

13voto

jasto salto Punkte 1

Ich verwende dieses Snipet, um eine 5-stellige Darstellung zu erhalten

(value+100000).toString().slice(-5) // "00123" with value=123

13voto

Vitim.us Punkte 18320

Ich weiß wirklich nicht, warum, aber niemand hat es auf die naheliegendste Weise getan. Hier ist meine Umsetzung.

Funktion:

/** Pad a number with 0 on the left */
function zeroPad(number, digits) {
    var num = number+"";
    while(num.length < digits){
        num='0'+num;
    }
    return num;
}

Prototyp:

Number.prototype.zeroPad=function(digits){
    var num=this+"";
    while(num.length < digits){
        num='0'+num;
    }
    return(num);
};

Sehr einfach, ich kann mir nicht vorstellen, wie das noch einfacher sein könnte. Aus irgendeinem Grund habe ich viele Male hier auf SO, Leute nur versuchen, "for" und "while" Schleifen um jeden Preis zu vermeiden. Die Verwendung von Regex wird wahrscheinlich viel mehr Zyklen für eine so triviale 8-stellige Auffüllung kosten.

12voto

Lifehack Punkte 1714

In allen modernen Browsern können Sie

numberStr.padStart(numberLength, "0");

function zeroFill(num, numLength) {
  var numberStr = num.toString();

  return numberStr.padStart(numLength, "0");
}

var numbers = [0, 1, 12, 123, 1234, 12345];

numbers.forEach(
  function(num) {
    var numString = num.toString();

    var paddedNum = zeroFill(numString, 5);

    console.log(paddedNum);
  }
);

Hier ist die MDN-Referenz https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X