Nach einer langen, langen Zeit des Testens von 15 verschiedenen Funktionen / Methoden, die in diesen Fragen gefunden wurden, weiß ich jetzt, welche die besten (die vielseitigsten und schnellsten) sind.
Ich habe 15 Funktionen / Methoden aus den Antworten auf diese Frage genommen und ein Skript erstellt, um die Zeit zu messen, die für die Ausführung von 100 Pads benötigt wird. Jedes Pad würde die Zahl 9
mit 2000
Nullen auffüllen. Dies mag übertrieben erscheinen, ist es aber, aber es gibt Ihnen eine gute Vorstellung von der Skalierung der Funktionen.
Den von mir verwendeten Code finden Sie hier:
https://gist.github.com/NextToNothing/6325915
Sie können den Code jederzeit selbst ändern und testen.
Um die vielseitigste Methode zu erhalten, müssen Sie eine Schleife verwenden. Dies liegt daran, dass bei sehr großen Zahlen andere wahrscheinlich scheitern, während dies erfolgreich sein wird.
Also, welche Schleife soll verwendet werden? Nun, das wäre eine while
Schleife. Eine for
Schleife ist immer noch schnell, aber eine while
Schleife ist nur etwas schneller (ein paar ms) - und sauberer.
Antworten wie die von Wilco
, Aleksandar Toplek
oder Vitim.us
den Job perfekt machen.
Persönlich habe ich einen anderen Ansatz versucht. Ich habe versucht, eine rekursive Funktion zu verwenden, um die Zeichenfolge / Nummer aufzufüllen. Es funktionierte besser als Methoden, die einem Array beitreten, funktionierte aber immer noch nicht so schnell wie eine for-Schleife.
Meine Funktion ist:
function pad(str, max, padder) {
padder = typeof padder === "undefined" ? "0" : padder;
return str.toString().length < max ? pad(padder.toString() + str, max, padder) : str;
}
Sie können meine Funktion mit oder ohne Einstellung der Füllvariablen verwenden. Also so:
pad(1, 3); // Returns '001'
// - Or -
pad(1, 3, "x"); // Returns 'xx1'
Persönlich würde ich nach meinen Tests eine Methode mit einer while-Schleife verwenden, wie Aleksandar Toplek
oder Vitim.us
. Ich würde es jedoch leicht ändern, damit Sie die Füllzeichenfolge festlegen können.
Also würde ich diesen Code verwenden:
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'
Sie können es auch als Prototypfunktion verwenden, indem Sie diesen Code verwenden:
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'