在JavaScript中推荐的零填充方法是什么?我想我可以构建一个自定义函数来填充零到类型转换的值,但我想知道是否有更直接的方法来做到这一点?
注意:这里的“zeroffilled”指的是数据库意义上的单词(其中数字5的6位零填充表示形式将是“000005”)。
在JavaScript中推荐的零填充方法是什么?我想我可以构建一个自定义函数来填充零到类型转换的值,但我想知道是否有更直接的方法来做到这一点?
注意:这里的“zeroffilled”指的是数据库意义上的单词(其中数字5的6位零填充表示形式将是“000005”)。
当前回答
这是我用来填充7个字符的数字。
("0000000" + number).slice(-7)
这种方法可能对大多数人来说已经足够了。
编辑:如果你想让它更通用,你可以这样做:
("0".repeat(padding) + number).slice(-padding)
编辑2:注意,自ES2017以来,你可以使用String.prototype.padStart:
number.toString().padStart(padding, "0")
其他回答
可变长度填充功能:
function addPaddingZeroes(value, nLength)
{
var sValue = value + ''; // Converts to string
if(sValue.length >= nLength)
return sValue;
else
{
for(var nZero = 0; nZero < nLength; nZero++)
sValue = "0" + sValue;
return (sValue).substring(nLength - sValue.length, nLength);
}
}
在测试了这个问题答案中15个不同的函数/方法之后,我现在知道哪个是最好的(最通用和最快的)。
我从这个问题的答案中选取了15个函数/方法,并制作了一个脚本来测量执行100个pad所花费的时间。每个数字垫上2000个零。这看起来有点过分,确实如此,但它让你对函数的缩放有了一个很好的了解。
我使用的代码可以在这里找到: https://gist.github.com/NextToNothing/6325915
您可以自行修改和测试代码。
为了得到最通用的方法,你必须使用循环。这是因为在数量非常大的情况下,其他人可能会失败,而这将会成功。
那么,使用哪个循环呢?这是一个while循环。for循环仍然很快,但while循环只是稍微快一点(几毫秒)——而且更干净。
Wilco, Aleksandar Toplek或Vitim的回答。我们会完美地完成这项工作。
就我个人而言,我尝试了不同的方法。我尝试使用递归函数填充字符串/数字。它比连接数组的方法更好,但仍然没有for循环那么快。
函数是:
function pad(str, max, padder) {
padder = typeof padder === "undefined" ? "0" : padder;
return str.toString().length < max ? pad(padder.toString() + str, max, padder) : str;
}
您可以使用我的函数设置填充变量,也可以不设置填充变量。就像这样:
pad(1, 3); // Returns '001'
// - Or -
pad(1, 3, "x"); // Returns 'xx1'
就我个人而言,在我的测试之后,我会使用一个带有while循环的方法,比如Aleksandar Toplek或vic .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'
简单的数学运算就可以得到一个单行函数:
function zeroFill( number, width ) {
return Array(width - parseInt(Math.log(number)/Math.LN10) ).join('0') + number;
}
这是假设number是一个不大于width的整数。如果调用例程不能保证,函数将需要进行一些检查:
function zeroFill( number, width ) {
var n = width - parseInt(Math.log(number)/Math.LN10);
return (n < 0) ? '' + number : Array(n).join('0') + number;
}
如果你使用Lodash。
Var n = 1; 警报(_。padLeft(n, 2,0));/ / 01 N = 10; 警报(_。padLeft(n, 2,0));/ / 10 < script src = " https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.0/lodash.min.js " > < /脚本>
function zFill(n,l){
return
(l > n.toString().length) ?
( (Array(l).join('0') + n).slice(-l) ) : n;
}