在JavaScript中将“1”转换为“0001”

可能重复:
是否有JavaScript函数可以填充string以达到确定的长度?

如何在不使用任何第三方库的情况下将JavaScript中的“1”转换为“0001”。 我使用spritf在php中完成了这个工作: $time = sprintf('%04.0f',$time_arr[$i]);

这是一个聪明的小动作(我想我以前见过):

 var str = "" + 1 var pad = "0000" var ans = pad.substring(0, pad.length - str.length) + str 

如果substring的第二个参数是负数,JavaScript比一些语言更宽容,所以它会“正确地溢出”(或根据查看的方式错误地):

就是说,用上面的:

  • 1 – >“0001”
  • 12345 – >“12345”

支持负数是作为一个练习;-)

快乐的编码。

只是为了演示javascript的灵活性:你可以使用这个oneliner

 function padLeft(nr, n, str){ return Array(n-String(nr).length+1).join(str||'0')+nr; } //or as a Number prototype method: Number.prototype.padLeft = function (n,str){ return Array(n-String(this).length+1).join(str||'0')+this; } //examples console.log(padLeft(23,5)); //=> '00023' console.log((23).padLeft(5)); //=> '00023' console.log((23).padLeft(5,' ')); //=> ' 23' console.log(padLeft(23,5,'>>')); //=> '>>>>>>23' 

如果你想使用这个负数:

 Number.prototype.padLeft = function (n,str) { return (this < 0 ? '-' : '') + Array(n-String(Math.abs(this)).length+1) .join(str||'0') + (Math.abs(this)); } console.log((-23).padLeft(5)); //=> '-00023' 

如果你不想使用Array

 number.prototype.padLeft = function (len,chr) { var self = Math.abs(this)+''; return (this<0 && '-' || '')+ (String(Math.pow( 10, (len || 2)-self.length)) .slice(1).replace(/0/g,chr||'0') + self); } 
 String.prototype.padZero= function(len, c){ var s= this, c= c || '0'; while(s.length< len) s= c+ s; return s; } 

尽pipe名字,你可以留下任何字符,包括一个空格。 我从来没有使用右侧填充,但这很容易。

我使用以下对象:

 function Padder(len, pad) { if (len === undefined) { len = 1; } else if (pad === undefined) { pad = '0'; } var pads = ''; while (pads.length < len) { pads += pad; } this.pad = function (what) { var s = what.toString(); return pads.substring(0, pads.length - s.length) + s; }; } 

有了它,你可以很容易地定义不同的“填充”:

 var zero4 = new Padder(4); zero4.pad(12); // "0012" zero4.pad(12345); // "12345" zero4.pad("xx"); // "00xx" var x3 = new Padder(3, "x"); x3.pad(12); // "x12"