经过很长很长一段时间的测试,在这个问题答案中发现了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'