在做大数据可视化需求时,经常遇到比较大、比较长的数据,产品就要求对展示的数字进行千分位
处理。

1. toLocaleString方法
1 2 3 4 5 6
| let num = 1234567890; console.log(num.toLocaleString()); let float = 12345.12; console.log(float.toLocaleString()); let str = '1234567890'; console.log(str.toLocaleString());
|
注意: toLocaleString
只能针对 Number
类型的数据进行千分位处理
2. 正则匹配
1 2 3 4 5 6 7 8 9 10
| let num = 1234567890; let reg = /\d{1,3}(?=(\d{3})+$)/g; String(num).replace(reg, '$&,');
let num = 1234567890; let reg = /\B(?=(\d{3})+$)/g; String(num).replace(reg, ',');
|
说明: 如果想知道具体怎样的分组方式,可在 https://regexper.com/ 上测试
?=
表示正向引用$&
表示与正则表达式相匹配的内容,可查看replace()\B
非单词边界
3. for循环
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 29 30 31
| function format(num){ num = String(num); let str = ''; for (let i = num.length- 1, j = 1; i >= 0; i--, j++){ if (j%3 == 0 && i != 0){ str += num[i] + ','; continue; } str += num[i]; } return str.split('').reverse().join(""); } let num = 1234567890; format(num);
function format(num){ num = String(num); let str = ''; for (let i = num.length- 1, j = 1; i >= 0; i--, j++){ if (j%3 == 0 && i != 0){ str = ',' + num[i] + str; continue; } str = num[i] + str; } return str; } let num = 1234567890; format(num);
|
4. slice+while循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| function format(num) { let arr = [], str = String(num), count = str.length;
while (count >= 3) { arr.unshift(str.slice(count - 3, count)); count -= 3; }
if(str.length % 3) arr.unshift(str.slice(0, str.length % 3));
return arr.toString(); } let num = 1234567890; format(num);
|
5. reduce
1 2 3 4 5 6 7 8
| function format(num) { var str = num+''; return str.split("").reverse().reduce((prev, next, index) => { return ((index % 3) ? next : (next + ',')) + prev; }) } let num = 1234567890; format(num);
|
欢迎访问:个人博客地址