在 JavaScript 中用前导零填充数字

2022-08-29 22:40:54

在JavaScript中,我需要填充。

例如,如果我有数字9,它将是“0009”。如果我有10个数字,它将是“0010”。请注意,它将始终包含四位数字。

一种方法是减去数字减去4,得到我需要输入的0个数字。

有没有一种更聪明的方法来做到这一点?


答案 1

ES2017 更新

您可以使用内置的 String.prototype.padStart()

n = 9;
String(n).padStart(4, '0'); // '0009'

n = 10;
String(n).padStart(4, '0'); // '0010'

到目前为止,没有太多的“光滑”:

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

使用数字初始化数组时,它会创建一个数组,该数组的设置为该值,以便该数组看起来包含那么多元素。虽然一些 Array 实例方法跳过没有值的数组元素,但不会,或者至少不是完全跳过;它将它们视为其值是空字符串。因此,您将获得每个数组元素之间的零字符(或任何“z”)的副本;这就是为什么那里有一个。lengthundefined.join()+ 1

用法示例:

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

pad(10, 4, '-'); // --10

答案 2
function padToFour(number) {
  if (number<=9999) { number = ("000"+number).slice(-4); }
  return number;
}

类似的东西?

奖金难以理解但更光滑的单行ES6版本:

let padToFour = number => number <= 9999 ? `000${number}`.slice(-4) : number;

ES6isms:

  • let是块范围的变量(与 的函数作用域相反)var
  • =>是一个箭头函数,除其他事项外,它替换并附加其参数function
  • 如果箭头函数采用单个参数,则可以省略括号(因此number =>)
  • 如果箭头函数体具有以 开头的单行,则可以省略大括号和关键字,只需使用表达式returnreturn
  • 为了让函数体减少到一行,我作弊并使用了三元表达式