この質問で見つかった15の異なる関数/メソッドのテストの長い、長い時間の後に、私はどちらが最高(最も用途が広く、最も速い)であるかを知っています。
この質問への回答から15の関数/メソッドを取り、100パッドを実行するのにかかる時間を測定するスクリプトを作成しました。各パッドは、数値9
を2000
ゼロで埋めます。これは過度に見えるかもしれませんが、実際はそうですが、関数のスケーリングについての良い考えを与えてくれます。
私が使用したコードはここにあります:https :
//gist.github.com/NextToNothing/6325915
自由にコードを変更してテストしてください。
最も用途の広いメソッドを取得するには、ループを使用する必要があります。これは、非常に多数の場合、他のユーザーは失敗する可能性が高いためですが、これは成功します。
では、どのループを使用するのでしょうか。まあ、それはwhile
ループになります。for
ループが速く、まだですが、while
ループはわずかに速く(ミリ秒のカップル)である-とクリーナー。
のような回答Wilco
、Aleksandar Toplek
またはVitim.us
完全に仕事をします。
個人的に、私は別のアプローチを試みました。文字列/数値を埋めるために再帰関数を使用しようとしました。配列を結合するメソッドよりもうまくいきましたが、それでもforループほど速く機能しませんでした。
私の機能は:
function pad(str, max, padder) {
padder = typeof padder === "undefined" ? "0" : padder;
return str.toString().length < max ? pad(padder.toString() + str, max, padder) : str;
}
パディング変数を設定してもしなくても、my関数を使用できます。このように:
pad(1, 3); // Returns '001'
// - Or -
pad(1, 3, "x"); // Returns 'xx1'
個人的には、テスト後、Aleksandar Toplek
またはのような、whileループを持つメソッドを使用しますVitim.us
。ただし、パディング文字列を設定できるように少し変更します。
だから、私はこのコードを使用します:
function padLeft(str, len, pad) {
pad = typeof pad === "undefined" ? "0" : pad + "";
str = str + "";
while(str.length < len) {
str = pad + str;
}
return str;
}
// Usage
padLeft(1, 3); // Returns '001'
// - Or -
padLeft(1, 3, "x"); // Returns 'xx1'
次のコードを使用して、プロトタイプ関数として使用することもできます。
Number.prototype.padLeft = function(len, pad) {
pad = typeof pad === "undefined" ? "0" : pad + "";
var str = this + "";
while(str.length < len) {
str = pad + str;
}
return str;
}
// Usage
var num = 1;
num.padLeft(3); // Returns '001'
// - Or -
num.padLeft(3, "x"); // Returns 'xx1'