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
 });
  • 这里的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
}

你可能感兴趣的:(#,代码实现,前端,js,金额格式化)