• js金额格式化,千分符,(好家伙!面试直接被问四次)


    前言

    九十月份,在我的面试经历中,这道题算是比较高频的了,都是出现在初次视频面试的过程中

    1、解题

    得到一个number类型数据,将小数点前面的部分从右到左用“,”每三位隔开
    例如

    输入 12344.2222
    输出 12,344.2222

    输入 344.2222
    输出 344.2222

    输入 -2344.2222
    输出 -2,344.2222

    2、思路

    • 校验输入的数据
    • 只处理小数点前面的部分
    • 判断是否为负数
    • 数据转数组,数组反转,reduce累加

    这里需要说的是最后一步

    • 既然是将数据从右到左每三位加一个逗号,这里想到的是先将数据每一位隔开成数组,然后再反转
    • 最后用到的是reduce来累加,达成一个字符串拼接的效果

    再来解释一下reduce

    reduce((pre, next, index)=>{
        return (index % 3 ? next : next + ',') + pre
     });
    
    • 1
    • 2
    • 3
    • 这里的index对应的下标是 next 在数组中的下标(切记
    • 由于此时数据已经是反转过来的,所以累加直接用从后往前加的方式就能达到反转之前的顺序了

    3、实现

    const convert = money => {
        if(typeof money !== 'number') return new Error('请输入正确的格式!');
        let num; // 小数点前面的部分
        const value = String(money).split('.')[1]; // 小数点后面的部分
        const flag = String(money).indexOf('-') > -1; // 是否为负数
        let result;
        if(flag){
            num = String(money).split('-')[1].split('.')[0];
        }else{
            num = String(money).split('.')[0];
        }
        
        // 先转数组 再反转  然后reduce判断位置累加
        result = num.split('').reverse().reduce((pre, next, index)=>{
            return (index % 3 ? next : next + ',') + pre
        });
        
    	// 拼接小数点后面的部分
        if(value){
            result = result + '.' + value;
        }
    	// 负数加上‘-’
        if(flag){
            result = '-' + result;
        }
    
        return result
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    ant javac任务的fork和executable属性
    Spring事务2+银行转账拓展
    【Linux高性能服务器编程】前篇
    1572.矩阵对角线元素的和
    项目-五子棋双人对战:游戏房间的管理(5)
    [Js进阶]bind、call、apply三个方法
    ps打开找不到MSVCP140.dll重新安装方法,安装ps出现msvcp140.dll缺失解决方法
    使用 python 检测泛洪攻击的案例
    [C国演义] 第十三章
    day9.30
  • 原文地址:https://blog.csdn.net/qq_41534913/article/details/127793893