在JavaScript中用前导零填充一个数字

在JavaScript中,我需要有padding。

例如,如果我有数字9,它将是"0009"。如果我有一个数字,例如10,它将是"0010"。请注意,它总是包含四个数字。

一种方法是将数字减去4,得到我需要的0的数量。

是否有一个更简单的方法来做到这一点?

到目前为止,没有很多"华而不实"的事情发生。

function pad(n, width, z) {
  z = z || '0';
  n = n + '';
  return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}

当你用一个数字初始化一个数组时,它会创建一个length'设置为该值的数组,这样数组看起来就包含了那么多undefined'元素。尽管一些Array实例方法跳过了没有值的数组元素,但.join()没有,或者至少没有完全跳过;它把这些元素当作其值是空字符串。因此,你会在每个数组元素之间得到一个零字符(或任何"z")的副本;这就是为什么那里有一个`+ 1'。

使用实例。

pad(10, 4);      // 0010
pad(9, 4);       // 0009
pad(123, 4);     // 0123

pad(10, 4, '-'); // --10
评论(14)

function padToFour(number) {
  if (number`是一个箭头函数,除其他事项外,还可以替代`function`,并以其参数为前缀。
 - 如果一个箭头函数只接受一个参数,你可以省略括号(因此`number =>`)。
 - 如果一个箭头函数的主体有一行以 "return "开始,你可以省略大括号和 "return "关键字,而仅仅使用表达式。
 - 为了使函数体只剩一行,我作弊使用了一个三元表达式
评论(10)

试试吧。

String.prototype.lpad = function(padString, length) {
    var str = this;
    while (str.length < length)
        str = padString + str;
    return str;
}

现在测试。

var str = "5";
alert(str.lpad("0", 4)); //result "0005"
var str = "10"; // note this is string type
alert(str.lpad("0", 4)); //result "0010"

[DEMO][1] 。


ECMAScript 8中,我们有新的方法padStartpadEnd,其语法如下。

'string'.padStart(targetLength [,padString])。

所以现在我们可以用

const str = "5";
str.padStart(4, '0'); // '0005'
评论(8)