在JavaScript中,我需要填充内容。
例如,如果我有数字9,它将变为“0009”。 如果我有一个数字10,它将变为“0010”。 请注意它将始终包含四个数字。
一种方法是减去数字减4以获取我需要放置的0的数量。
是否有更加简洁的方法来做到这一点?
例如,如果我有数字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;
}
如果你用一个数字初始化数组,它将创建一个长度设置为该值的数组,以便该数组看起来包含那么多个未定义的元素。尽管某些数组实例方法跳过没有值的数组元素,但.join()
不会,至少不完全;它将它们视为其值为空字符串。因此,在每个数组元素之间,你会得到零字符(或者无论“z”是什么)的副本;这就是为什么其中有一个+ 1
的原因。
例如用法:
pad(10, 4); // 0010
pad(9, 4); // 0009
pad(123, 4); // 0123
pad(10, 4, '-'); // --10
function pad(n, width, z) { while(n.length<width) n = '' + z + n; return n;}
- Paolofunction pad(n, width=3, z=0) {return (String(z).repeat(width) + String(n)).slice(String(n).length)}
- Gui LeFleafunction padToFour(number) {
if (number<=9999) { number = ("000"+number).slice(-4); }
return number;
}
像这样吗?
额外附加的单行ES6版本可能有些难以理解,但是更简洁:
let padToFour = number => number <= 9999 ? `000${number}`.slice(-4) : number;
ES6主要特性:
let
是块级作用域变量(与var
的函数级作用域不同)=>
是一个箭头函数,可以替换function
,并在其参数之前加上number =>
)return
开头的语句,可以省略大括号和return
关键字,并直接使用该表达式Number
,对于更大的数字,则返回String
。这种对类型的轻率处理是 JavaScript 程序中无数错误的源头。我建议还将“else”分支的值转换为String
:... : "" + number
。 - Tad Lispysprintf (padToFour, "%04d", number);
的时代以来,我们的进步倒退了。 - gregn3尝试:
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"
length
个字符,以处理 padString
大于一个符号的情况。 - DCoder"5".lpad("--", 4)
会产生"----5
"而不是 "---5
"。 - DCoder有趣的是,最近我也不得不这样做。
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"
不够美观,但是有效。
pad(15, 3)
。 - Peter Creturn (Array(Math.max(5-str.length, 0)).join("0") + str);
,如果其他问题被删除,就放弃这个答案。 - ajax333221Math.abs(number)
,代码如下:(number < 0 ? '-' : '') + Array(Math.max(digits - String(value).length + 1, 0)).join(0) + value
。 - Neil MonroeString.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);
}
var v=2;
v.padZero(4);
v.padZero(4,'+');
产生'0002'
'+++2'
- rob String.prototype.lpad = function(len, c){
var s= '', c= c || ' ', len= (len || 2)-this.length;
while(s.length
- MrMesees你可以像这样做:
function pad ( num, size ) {
return ( Math.pow( 10, size ) + ~~num ).toString().substring( 1 );
}
编辑:这只是一个基本的函数想法,但为了支持更大的数字(以及无效输入),可能需要做出以下改进:
function pad ( num, size ) {
if (num.toString().length >= size) return num;
return ( Math.pow( 10, size ) + Math.floor(num) ).toString().substring( 1 );
}
这段代码执行2个操作:
~~num
的位置上使用 Math.floor(num)
将支持更大的数字。pad(1111111111111, 10)
返回714581447
。 - Serkan Yersen虽然这不是真正的“流畅”,但使用整数操作比每次进行字符串连接更快地进行填充 0
。
function ZeroPadNumber ( nValue )
{
if ( nValue < 10 )
{
return ( '000' + nValue.toString () );
}
else if ( nValue < 100 )
{
return ( '00' + nValue.toString () );
}
else if ( nValue < 1000 )
{
return ( '0' + nValue.toString () );
}
else
{
return ( nValue );
}
}
这个函数也是硬编码到您特定的需求(4位填充),因此它不是通用的。
((x < 10) ? '000' : (x < 100) ? '00' : (x < 1000) ? '0' : '')+(+x)
- AlexChaffee为了好玩,我们可以不使用循环来创建额外的零:
function zeroPad(n,length){
var s=n+"",needed=length-s.length;
if (needed>0) s=(Math.pow(10,needed)+"").slice(1)+s;
return s;
}
new Array(needed + 1).join('0')
怎么样,而不是使用那个昂贵的指数? :-) - Pointyfunction pad(input) {
var BASE = "0000";
return input ? BASE.substr(0, 4 - Math.ceil(input / 10)) + input : BASE;
}
4-`${input}`.length()
替换4-Math.ceil(...)
部分。 - bvdb
('000' + num).slice(-4)
就足够了 ;) - Martin SchneiderString(n).padStart(4, '0')
: - bpceee