JavascriptでpadLeft

C#で言うところの『padLeft』がほしい、ということで書いてみた。

String.prototype.padLeft = function(len, chr){
  return len < 1 ? this : (function(c){
    var ret = '';
    while (ret.length < len) 
      ret += c;
    return ret;
  })(chr.substr(0, 1) || '0') + this;
}

alert("1".padLeft(4, "0")); //0001

しかし、何か気に入らないのでWebで調べると、どうもprototype.jsで同じような関数があることが分かった。
必要なのは『times』関数。で、それに少々手を加えてみる。
この中身を見ると、自身の文字列の長さを無視しているので、このままだと埋める文字の長さが一文字以上だとおかしな結果になるので『this.substr(0, 1) || ''』とした。まあ余計な対応かもしれないが不必要なら削除すれば良い。


以下が最終的な形。
String.prototype.times = function(len){
  return len < 1 ? '' : new Array(++len).join(this.substr(0, 1) || '');
}

String.prototype.padRight = function(len, chr){
  return this + chr.times(len - this.length);
}

String.prototype.padLeft = function(len, chr){
  return chr.times(len - this.length) + this;
}
処理速度的には私が書いたものとほとんど変わらないが、コードはすっきりしているのでこちらの方が良いだろう。


padRightが必要ないならtimesを分けて書く必要がないので、下記のように併せてしまえばもっと処理は速くなる。
String.prototype.padLeft = function(len, chr){
  return len < 1 ? this : new Array(++len - this.length).join(chr.substr(0, 1) || '') + this;
}

0 Comments:

Recent Posts