JavaScriptで数値を先頭のゼロで埋める

JavaScriptで、パディングをしたいのですが。

例えば、9という数字があれば、それは"0009"となります。また、10という数字があれば、"0010"となります。このように、常に4桁の数字が含まれていることに注目してください。

一つの方法は、数字から4を引いて、必要な0の数を求めることです。

もっと簡単な方法はありませんか?

これまでのところ、"slick" "はあまり多くありません。

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

配列を数値で初期化すると、 length をその値に設定した配列が作成され、配列には undefined の要素がその数だけ含まれているように見えます。配列のインスタンスメソッドの中には、値を持たない配列要素をスキップするものがありますが、.join()はスキップしません、少なくとも完全にはしません。そのため、配列の各要素の間にゼロ文字(または "z")のコピーを取得します;これが + 1 がある理由です。

使用例です。

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

pad(10, 4, '-'); // --10
解説 (14)

function padToFour(number) {
  if (number` は矢印関数で、特に `function` を置き換えるものであり、その前にパラメータが付けられます。
 - 矢印関数が単一のパラメータを取る場合は、括弧を省略することができます (そのため、 `number =>` となります)。
 - アロー関数の本体が `return` で始まる1行の場合、中括弧と `return` キーワードを省略して、単に式を使用することができます。
 - 関数本体を一行にまとめるために、私はズルをして三項式を使いました。
解説 (10)

試してみてください。

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

今度はテスト。

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].


ECMAScript 8**では、以下のシンタックスを持つ新しいメソッドpadStartと[padEnd][3]があります。

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

これで、次のように使えます。

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

[3]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd

解説 (8)