После долгого и долгого тестирования 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;
}
Вы можете использовать мою функцию с настройкой переменной padding или без нее. Ну вот так:
pad(1, 3); // Returns '001'
// - Or -
pad(1, 3, "x"); // Returns 'xx1'
Лично после тестов я бы использовал метод с циклом while, например Aleksandar Toplek
или 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'