Js笔试题之千分位格式化

用js实现如下功能,将给定的数字转化成千分位的格式,如把“10000”转化成“10,000”,并考虑到性能方面的因素。

一.首先想到的办法,将数字转换为字符串(toString())再打散成数组(split),如果直接数字转换为数组,就是一整个放进去了,不能单独取到每一位。然后通过循环,逐个倒着把数组中的元素插入到新数组的开头(unshift),第三次或三的倍数次,插入逗号,最后把新数组拼接成一个字符串

n=1233456;
toQfw(n);
function toQfw(){
    var arr_n=n.toString().split("");
    var result=[];
    var cs=0;
    for(var i=arr_n.length-1;i>=0;i--){
        cs++;
        result.unshift(arr_n[i]);
        if(!(cs%3)&&i!=0){           //i!=0即取到第1位的时候,前面不用加逗号
                result.unshift(",");
        }
        alert(result.join(""))
    }
};

缺点,一位一位的加进去,性能差,且还要先转换成字符串再转换成数组

二.于是想到能不能从头到尾都用字符串完成,不通过数组,即用charAt()获取子字符串,主要用到字符串拼接

n=1233456;
toQfw(n);
function toQfw(){
    var str_n=n.toString();
    var result="";
    var cs=0;
    for(var i=str_n.length-1;i>=0;i--){
        cs++;
        result=str_n.charAt(i)+result;
        if(!(cs%3)&&i!=0){           
                result=","+result;
        }
        alert(result)
    }
};

缺点:依然是一位一位加进去

三.可不可以不用循环用纯字符串方法来实现,这样就不会一位一位加进去了。每次取末三位子字符串放到一个新的空字符串里并拼接上之前的末三位,原本数组不断截掉后三位直到长度小于三个,最后把剥完的原数组拼接上新的不断被填充的数组

n=1233456;
toQfw(n);
function toQfw(){
    var str_n=n.toString();
    var result="";
    while(str_n.length>3){
        result=","+str_n.slice(-3)+result;
        str_n=str_n.slice(0,str_n.length-3)
    }
    if(str_n){
        alert(str_n+result)
    }
};

性能最佳

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。