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

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


当前回答

如果性能真的很关键(遍历数百万条记录),则可以预先生成填充字符串数组,从而避免每次调用都这样做。

时间复杂度:O(1)。 空间复杂度:O(1)。

const zeroPads = Array.from({ length: 10 }, (_, v) => '0'.repeat(v)) 函数 zeroPad(num, len) { const numStr = String(num) return (zeroPads[len - numStr.length] + numStr) }

其他回答

只是为了好玩,这里是我版本的pad函数:

function pad(num, len) {
  return Array(len + 1 - num.toString().length).join('0') + num;
}

它也不会截断比填充长度更长的数字

function zeroPad(num,digits){ return ((num/Math.pow(10,digits))+'').slice(2) } 

如果填充数事先知道不超过某个值,还有另一种不循环的方法:

var fillZeroes = "00000000000000000000";  // max number of zero fill ever asked for in global

function zeroFill(number, width) {
    // make sure it's a string
    var input = number + "";  
    var prefix = "";
    if (input.charAt(0) === '-') {
        prefix = "-";
        input = input.slice(1);
        --width;
    }
    var fillAmt = Math.max(width - input.length, 0);
    return prefix + fillZeroes.slice(0, fillAmt) + input;
}

测试用例在这里:http://jsfiddle.net/jfriend00/N87mZ/

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

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

Use:

function zfill(num, len) {
  return(0 > num ? "-" : "") + (Math.pow(10, len) <= Math.abs(num) ? "0" + Math.abs(num) : Math.pow(10, len) + Math.abs(num)).toString().substr(1)
}

这可以处理负数和数字比字段宽度长的情况。和浮点。