代码改变世界

javascript数字补零

2009-09-08 23:39  BlueDream  阅读(4059)  评论(0编辑  收藏  举报
昨天闲逛51js发现这个有趣的帖子.后来发现lifesinger,月影.Amingoo都讨论了一番.所以自己也总结下.
自己当时给出的解决方法是:
function pad(num, n) {
        
return (new Array(n >(''+num).length ? (n - (''+num).length+1) : 0).join('0'+ num);
}
alert(pad(
122022));
运用了Array(n+1).join()倍增的效率优越性.
但不管从效率还是稳定性.最后肯定了所谓的"质朴长存法".其实这也说明了,解决问题不要忽略最基本的方法:
function pad(num, n) {
    
var len = num.toString().length;
    
while(len < n) {
        num 
= '0' + num;
        len
++;
    }
    
return num;
}
alert(pad(
102,4))
最后针对上文的第一个方法.周爱民给出了一个效率上细节的一个提升:
<script type="text/javascript"> 
var pad = function(tbl) {
            
return function(num, n){
                
return (0 >= (n - ''+num.length)) ? num : (tbl[n] || (tbl[n] = Array(n + 1).join(0)))+num;
        }    
}([]);
alert(pad(
2336));
</script>
这段代码,与第一段代码相比.就是通过闭包返回个数组.如果不需要补零就只要调用缓存里的tbl[len]了.就用空间换取了时间.
这些细节,其实写程序需要养成这种良好的习惯.当然其实方法很多.就不一一列出了.主要是为了告诉解决问题的不同思维.
更好的分析和讨论见:
http://bbs.51js.com/viewthread.php?tid=85137&pid=595796&page=2&extra=#pid595796 51js
http://lifesinger.org/blog/2009/08/the-harm-of-tricky-code/ lifesinger