同学前端面试遇到这么一个题目 :给数字添加千分位分隔符

一拿到他给的面试题,感觉挺容易的,不过等自己写后发现非常考虑逻辑,以及思维能力(我是小白)
上网百度了一波全是用正则表达式来解决的,正则这块我只懂皮毛,所以感觉有点看不明白,不过这个博客解释挺清楚的使用正则表达式实现千位分割符


我这个人就是有一个毛病,感兴趣的东西我就想以自己的思维写出来,所以以下是一个前端小白的解决思路:
将函数thousand的参数a看成3部分组合head,body,xiaoshu.列如:1314.520可当做1 314 .520这三部分组合而成。废话少说,代码如下:

<script>
function thousand(a){
    var arr = new Array(); 
    var xiaoshu = "";  //用来记录参数小数数值包括小数点
    var zhengshu ="";  //用来记录参数录整数数值
    if(a<1000){    //当参数小于1000的时候直接返回参数
        return a;
    }else{
        t = a.toString();   //将整数转换成字符串
        if(t.indexOf('.')>0){   //如果参数存在小数,则记录小数部分与整数部分
            var index = t.indexOf('.');
            xiaoshu = t.slice(index,t.length);
            zhengshu = t.slice(0,index);
        }else{   //否则整数部分的值就等于参数的字符类型
            zhengshu = t;
        }
        var num = parseInt(zhengshu.length/3);   //判断需要插入千位分割符的个数

        //将整数1234567890部分拆分为2部分,变量head:1   变量body:123456789
        var head = zhengshu.slice(0,zhengshu.length-num*3);  
        if(head.length>0){  //如果head存在,则在head后面加个千位分隔符,
            head += ',';
        }
        var body = zhengshu.slice(zhengshu.length-num*3,zhengshu.length);

        //将body字符串123456789转换成一个字符数组arr2 = ['123','456','789']
        var arr2 = new Array();   
        for(var i=0;i<num;i++){
            arr2.push(body.slice(i*3,i*3+3));
        }
        body = arr2.join(',');   //将数组arr2通过join(',')   方法,拼接成一个以逗号为间隔的字符串

        zhengshu = head + body;  //拼接整数部分
        var result = zhengshu + xiaoshu;   //最后拼接整数和小数部分
        return result;   //返回结果
    }
}
console.log(thousand(665565656511325161.233333));
</script>

小白敬上!


icezero
28 声望3 粉丝