一、普通版

  1. function formatNumber(num){
  2. let arr = [],
  3. str = num + '';
  4. count = str.length;
  5. while(count >= 3){
  6. // 将字符串3个一组存入数组
  7. arr.unshift(str.slice(count-3,count));
  8. count -= 3;
  9. }
  10. // 如果不是3的倍数就另外追加到数组
  11. str.length % 3 && arr.unshift(str.slice(0,str.length % 3));
  12. return arr.toString();
  13. }
  14. console.log(formatNumber(1234567890));

二、进阶版

  1. function formatNumber(num){
  2. //str.split('').reverse() => ["0", "9", "8", "7", "6", "5", "4", "3", "2", "1"]
  3. return num.toString().split('').reverse().reduce((prev,next,index) => {
  4. return ((index % 3) ? next : (next + ',')) + prev
  5. })
  6. }
  7. console.log(formatNumber(1234567890));

三、正则版

  1. function formatNumber(num) {
  2. /*
  3. ①/\B(?=(\d{3})+(?!\d))/g:正则匹配非单词边界\B,即除了1之前的位置,其他字符之间的边界,后面必须跟着3N个数字直到字符串末尾
  4. ②(\d{3})+:必须是1个或多个的3个连续数字;
  5. ③(?!\d):第2步中的3个数字不允许后面跟着数字;
  6. */
  7. return (num+'').replace(/\B(?=(\d{3})+(?!\d))/g, ',')
  8. }
  9. console.log(formatNumber(1234567890)) // 1,234,567,890

四、AIP版

(1)toLocaleString

  1. function formatNumber(num){
  2. return num.toLocaleString('en-US');
  3. }
  4. console.log(formatNumber(1234567890));

(2) Intl对象

  1. function formatNumber(num){
  2. return new Intl.NumberFormat().format(num);
  3. }
  4. console.log(formatNumber(1234567890));