Конвертировать '1' в '0001' в JavaScript

Возможный дубликат:
Есть ли функция JavaScript, которая может заполнить строку до определенной длины?

Как конвертировать '1' в '0001' в JavaScript без использования каких-либо сторонних библиотек. Я сделал это в php, используя spritf: $time = sprintf('%04.0f',$time_arr[$i]);

Ответ 1

Это умный маленький трюк (который, я думаю, я видел на SO раньше):

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

JavaScript более прощающий, чем некоторые языки, если второй аргумент подстроки отрицательный, поэтому он будет "переполняться правильно" (или неправильно в зависимости от того, как он просматривается):

То есть, с приведенным выше:

  • 1 → "0001"
  • 12345 → "12345"

Поддержка отрицательных чисел остается в виде упражнения; -)

Счастливое кодирование.

Ответ 2

Просто, чтобы продемонстрировать гибкость 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);
}

Ответ 3

String.prototype.padZero= function(len, c){
    var s= this, c= c || '0';
    while(s.length< len) s= c+ s;
    return s;
}

укажите имя, вы можете оставить панель с любым символом, включая пробел. Я никогда не пользовался правом наложения, но это было бы достаточно легко.

Ответ 4

Я использую следующий объект:

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;
  };
}

С его помощью вы можете легко определить разные "paddings":

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"