算法:用JS实现数字千分位格式化

356 阅读1分钟
  • 将数字千分位格式化,输出字符串
  • 如输入数组12050100,输出字符串12,050,100
  • (注意:逆序判断)

常见思路

  • 转换位数组,reverse,每3位拆分
  • 使用正则表达式
  • 使用字符串拆分

使用数组

function format1(n: number): string {
  let n1: number = Math.floor(n)
  let arr: string[] = n1.toString().split('').reverse()
  return arr.reduce((prev, val, index) => {
    if (prev !== '') {
      if (index % 3 === 0) {
        return val + ',' + prev
      } else {
        return val + prev
      }
    } else {
      return val
    }
  }, '')
}

使用字符串

function format2(n: number): string {
  let n1: number = Math.floor(n)
  let s: string = n1.toString()
  let length = s.length
  let res = ''
  let j: number = 0
  for (let i = length - 1; i >= 0; i--) {
    j = length - i
    if (j % 3 === 0) {
      if (i === 0) {
        res = s[i] + res
      } else {
        res =',' + s[i]  + res
      }
    } else {
      res = s[i] + res
    }
  }
  return res
}

功能测试

console.log(format1(10201340983))
console.log(format2(10201340983))

结果

image.png

性能分析

  • 使用数组,转换影响性能
  • 使用正则表达式,性能较差
  • 使用字符串,性能较好 -- 推荐答案

划重点

  • 顺序:从尾到头
  • 尽量不要转换数据结构
  • 慎用正则表达式