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

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


当前回答

我只是偶然发现这篇文章寻找一个本地的解决方案。由于没有内置的解决方案,以下是我的看法:

function zerofill(number, width) {
    var num = '';
    while (width-- > 0) {
        num += '0';
    }

    return num.slice(0, - (number + '').length) + number + '';
}

其他回答

可变长度填充功能:

function addPaddingZeroes(value, nLength)
{
    var sValue = value + ''; // Converts to string

    if(sValue.length >= nLength)
        return sValue;
    else
    {
        for(var nZero = 0; nZero < nLength; nZero++)
            sValue = "0" + sValue;
        return (sValue).substring(nLength - sValue.length, nLength);
    }
}

使用递归:

function padZero(s, n) {
    s = s.toString(); // In case someone passes a number
    return s.length >= n ? s : padZero('0' + s, n);
}

我觉得我的方法有点不同。我需要填充一个数字的原因是在<pre>元素(屏幕日志的一部分)中显示它,所以它最终将是一个字符串。我没有做任何数学运算,而是写了一个简单的函数来覆盖一个掩码字符串上的字符串值:

function overlayr(m, s) {
  return m.length > s.length ? m.substr(0, m.length - s.length) + s : s;
}

这样做的好处是,我可以将它用于各种字符串对齐任务。要调用它,只需传入掩码和数字作为字符串:

> overlayr('00000', (5).toString())
< "00005"

作为一个额外的好处,它可以正确地处理溢出:

> overlayr('00000', (555555).toString())
< "555555"

当然它不局限于0填充:

> overlayr('*****', (55).toString())
< "***55"

快速而肮脏的方式:

y = (new Array(count + 1 - x.toString().length)).join('0') + x;

当x = 5 count = 6时y = "000005"

不要白费力气;使用下划线字符串:

js小提琴

var numToPad = '5';

alert(_.str.pad(numToPad, 6, '0')); // Yields: '000005'