在 JavaScript 中,我需要填充。
例如,如果我有数字 9,它将是“0009”。如果我有一个数字说 10,它将是“0010”。请注意它如何始终包含四位数字。
一种方法是减去负 4 的数字以获得我需要放置的 0 的数量。
有没有更巧妙的方法来做到这一点?
在 JavaScript 中,我需要填充。
例如,如果我有数字 9,它将是“0009”。如果我有一个数字说 10,它将是“0010”。请注意它如何始终包含四位数字。
一种方法是减去负 4 的数字以获得我需要放置的 0 的数量。
有没有更巧妙的方法来做到这一点?
您可以使用内置的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;
}
当您使用数字初始化数组时,它会创建一个数组,该数组length
设置为该值,以便该数组看起来包含那么多undefined
元素。尽管一些 Array 实例方法会跳过没有值的数组元素,.join()
但不会或至少不会完全跳过;它将它们视为它们的值是空字符串。因此,您会在每个数组元素之间获得零字符(或任何“z”)的副本;这就是为什么那里有一个+ 1
。
用法示例:
pad(10, 4); // 0010
pad(9, 4); // 0009
pad(123, 4); // 0123
pad(10, 4, '-'); // --10
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 =>
)return
您可以省略大括号和return
关键字,只需使用表达式尝试:
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"
在ECMAScript 2017 中,我们有新的方法padStart
, padEnd
其语法如下。
"string".padStart(targetLength [,padString]):
所以现在我们可以使用
const str = "5";
str.padStart(4, "0"); // "0005"
有趣的是,我最近不得不这样做。
function padDigits(number, digits) {
return Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number;
}
像这样使用:
padDigits(9, 4); // "0009"
padDigits(10, 4); // "0010"
padDigits(15000, 4); // "15000"
不漂亮,但有效。
你确实说过你有一个号码——
String.prototype.padZero= function(len, c){
var s= '', c= c || '0', len= (len || 2)-this.length;
while(s.length<len) s+= c;
return s+this;
}
Number.prototype.padZero= function(len, c){
return String(this).padZero(len,c);
}