JavaScript 实现数值小于10000自动补零

群里有人提问一个小问题,作为萌新的我,喜欢根据别人实际工作中碰到的问题作为练手问题进行尝试,也算是给自己找一些练手的小需求吧。但是代码写得实在太少了,显得十分菜逼,不管如何,以后还是要经常多写写才行,不管质量如何。


JavaScript 第一种实现方法

按照原来写C语言的惯性思维,我首先想到的写法是将数字作为字符串,判断字符串长度并进行补零操作,这种写法虽然不够灵活,但简单易懂。

function fixZeroForNumber(diynum) {
    if (diynum >= 10000 || diynum < 0){
        console.log('diynum error!')
        return;
    }

    let diynumToString = diynum.toString();
    switch (diynumToString.length) {
        case 1:
            return '0000' + diynumToString;
            break;
        case 2:
            return '000' + diynumToString;
            break;
        case 3:
            return '00' + diynumToString;
            break;
        case 4:
            return '0' + diynumToString;
            break;
        default:
            return diynumToString;
    }
}

console.log(fixZeroForNumber(9999));
console.log(fixZeroForNumber(999));
console.log(fixZeroForNumber(99));
console.log(fixZeroForNumber(9));
console.log(fixZeroForNumber(99999));
console.log(fixZeroForNumber(-1));

JavaScript 第二种实现方法

下边的这个思路性能更好,代码也更简单,可自定义也更强一些。相当于字符串当作数组,追加0,并根据长度减少多出的0的个数。具体如下:

function fixZeroForNumber(str, n) {
    if (parseInt(str) >= 10000 || parseInt(str) < 0){
        console.log('str error!')
        return;
    }
    return (Array(n).join(0) + str).slice(-n);
}

console.log(fixZeroForNumber(9999,5));
console.log(fixZeroForNumber(999,5));
console.log(fixZeroForNumber(99,5));
console.log(fixZeroForNumber(9,5));
console.log(fixZeroForNumber(99999,5));

JavaScript 第三种实现方法

如果考虑性能开销更低的话,可以使用下边的方法,更加贴近C的写法,上边第一种方法虽然简单但是可定制很差。第二种的主要是要考虑 array.join 也是一种开销。

function fixZeroForNumber(num, n) {
    let len = num.toString().length;
    while(len < n) {
      num = "0" + num;
      len++;
    }
    return num;
  }

console.log(fixZeroForNumber(1,4));
console.log(fixZeroForNumber(10,4));
console.log(fixZeroForNumber(100,4));
console.log(fixZeroForNumber(100,4));
console.log(fixZeroForNumber(1000,4));
console.log(fixZeroForNumber(10000,4));