1. ホーム
  2. ジャバスクリプト

[解決済み】文字列を決められた長さになるように埋めることができるJavaScriptの関数はありますか?

2022-03-30 13:05:54

質問

私は値を取り、与えられた長さにそれを埋めることができる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)
);

解決方法は?

EcmaScript 2017を追加しました。 String.padStart (とともに String.padEnd を使用します。

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

JSホストに存在しない場合。 String.padStart をポリフィルとして追加することができます。

ES-2017以前

こんな解決策がありました こちら この方がずっとシンプルです。

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"のフォーマットで時間を返します。