文字列を所定の長さに詰め込むことができる JavaScript 関数はありますか? 質問する

文字列を所定の長さに詰め込むことができる JavaScript 関数はありますか? 質問する

値を取得して、それを指定された長さに埋め込むことができる JavaScript 関数が必要です (スペースが必要ですが、何でも構いません)。これを見つけたのですが、一体何をしているのか全くわかりませんし、私にはうまく機能していないようです。

String.prototype.pad = function(l, s, t) {
  return s || (s = " "),
    (l -= this.length) > 0 ?
    (s = new Array(Math.ceil(l / s.length) + 1).join(s))
    .substr(0, t = !t ? l : t == 1 ?
      0 :
      Math.ceil(l / 2)) + this + s.substr(0, l - t) :
    this;
};



var s = "Jonas";
document.write(
  '<h2>S = '.bold(), s, "</h2>",
  'S.pad(20, "[]", 0) = '.bold(), s.pad(20, "[]", 0), "<br />",
  'S.pad(20, "[====]", 1) = '.bold(), s.pad(20, "[====]", 1), "<br />",
  'S.pad(20, "~", 2) = '.bold(), s.pad(20, "~", 2)
);

ベストアンサー1

ECMAScript 2017(ES8) 追加String.padStart(とともにString.padEnd) はまさにこの目的のためです:

"Jonas".padStart(10); // Default pad string is a space
"42".padStart(6, "0"); // Pad with "0"
"*".padStart(8, "-/|\\"); // produces '-/|\\-/|*'

JavaScriptホストに存在しない場合はString.padStartポリフィル

ES8以前

この解決策を見つけましたここそして私にとっては、これははるかに簡単です:

var n = 123

String("00000" + n).slice(-5); // returns 00123
("00000" + n).slice(-5); // returns 00123
("     " + n).slice(-5); // returns "  123" (with two spaces)

ここで、文字列オブジェクトの拡張を作成しました。

String.prototype.paddingLeft = function (paddingValue) {
   return String(paddingValue + this).slice(-paddingValue.length);
};

使用例:

function getFormattedTime(date) {
  var hours = date.getHours();
  var minutes = date.getMinutes();

  hours = hours.toString().paddingLeft("00");
  minutes = minutes.toString().paddingLeft("00");

  return "{0}:{1}".format(hours, minutes);
};

String.prototype.format = function () {
    var args = arguments;
    return this.replace(/{(\d+)}/g, function (match, number) {
        return typeof args[number] != 'undefined' ? args[number] : match;
    });
};

これにより、「15:30」という形式で時刻が返されます。

おすすめ記事