用JavaScript代码实现空位补零

作者:ITattoo

今天一直泡在TaobaoUED里面,看见《奇淫技巧和西天取经》一文,觉得受益很多。

现在开始正题:

题目:如何用JavaScript代码实现空位补零?如pad(12,3) ==>012

很多童鞋拿到这个题目,都会这样做:

/* 平淡无奇法 */
function pad(num, n) {
    var len = num.toString().length;
    while (len < n) {
        num = "0" + num;
        len++;
    }
    return num;
}

不少有经验的童鞋就会看出上面的代码也可以用其他的方式实现

/* 质朴长存法 */
function padG(num, n) {
    var i = (num + "").length;
    while (i++ < n) {
        num = "0" + num;
    }
    return num;
}

有学过递归用法,可能不会考虑while循环

/* 神奇递归法 */
function pad2(num, n) {
    if ((num + "").length >= n) return num;
    return pad2("0" + num, n);
}

以上一看就不是大牛的写法,对不对?于是乎有能者这样写到

/* 奇淫技巧法 */
function pad3(num, n) {
    return (Array(n).join(0) + num).slice(-n);
}

但是呢。上面的代码有BUG,就是当num长度大于n的时候,会出现截断出错的情况,于是我做了一些改进,有更好的想法也欢迎留言提出来

/* 奇淫技巧法改进 */
function pad3G(num, n) {
    return (num + "").length <= n ? (Array(n).join(0) + num).slice(-n) : num;
}

正所谓条条大路通罗马,思路不一样,实现的方式也就不一样,

/*奇淫技巧法2*/
function pad5(num, n) {
    return Array(n - ("" + num).length + 1).join(0) + num;
}

不少同学肯定会马上拿去,也会发现上面的代码有BUG,就是当num长度大于n很多的时候,会显示不出来,于是我又做了一些改进

/*奇淫技巧法2改进*/
function pad5G(num, n) {
    return Array((n - ("" + num).length + 1) >= 0 ? (n - ("" + num).length + 1) : 0).join(0) + num;
}