在JavaScript中推荐的零填充方法是什么?我想我可以构建一个自定义函数来填充零到类型转换的值,但我想知道是否有更直接的方法来做到这一点?

注意:这里的“zeroffilled”指的是数据库意义上的单词(其中数字5的6位零填充表示形式将是“000005”)。


当前回答

我经常使用这个结构来填充某个值n,已知是一个正的小数:

(offset + n + '').substr(1);

其中偏移量为10^^位。

例如,填充到5位数,其中n = 123:

(1e5 + 123 + '').substr(1); // => 00123

十六进制的版本稍微详细一些:

(0x100000 + 0x123).toString(16).substr(1); // => 00123

注1:我也喜欢@profitehlolz的解决方案,它是这个的字符串版本,使用slice()的漂亮的负索引特性。

其他回答

一个简单的递归函数来实现您的建议:

function padleft (YourNumber, OutputLength){
    if (YourNumber.length >= OutputLength) {
        return YourNumber;
    } else {
        return padleft("0" +YourNumber, OutputLength);
    }
}

YourNumber是输入的数字。 OutputLength是首选的输出数字长度(剩余填充为0)。

如果您的输入数字长度小于所需的输出数字长度,此函数将在左侧添加0。

这是你能找到的最简单、最直接的解决方案。

function zerofill(number,length) {
    var output = number.toString();
    while(output.length < length) {
      output = '0' + output;
    }
    return output;
}

这是我写的一个angular提供程序,它利用了@profitehlolz的答案,但使用了内存,这样常用的pad长度-pad字符组合就不会不必要地调用数组构建连接:

angular.module('stringUtilities', [])
    .service('stringFunctions', [function() {
        this.padMemo={ };
        this.padLeft=function(inputString,padSize,padCharacter) {

            var memoKey=padSize+""+padCharacter;

            if(!this.padMemo[memoKey]) {

                this.padMemo[memoKey]= new Array(1 + padSize).join(padCharacter);
            }

           var pad=this.padMemo[memoKey];
           return (pad + inputString).slice(-pad.length);
       };
}]);

这个方法不是更快,但它相当原生。

zeroPad = function (num, count) {
    return [Math.pow(10, count - num.toString().length), num].join('').substr(1);
};

一些monkeypatching也可以工作

String.prototype.padLeft = function (n, c) {
  if (isNaN(n))
    return null;
  c = c || "0";
  return (new Array(n).join(c).substring(0, this.length-n)) + this; 
};
var paddedValue = "123".padLeft(6); // returns "000123"
var otherPadded = "TEXT".padLeft(8, " "); // returns "    TEXT"