一、普通版
function formatNumber(num){
let arr = [],
str = num + '';
count = str.length;
while(count >= 3){
// 将字符串3个一组存入数组
arr.unshift(str.slice(count-3,count));
count -= 3;
}
// 如果不是3的倍数就另外追加到数组
str.length % 3 && arr.unshift(str.slice(0,str.length % 3));
return arr.toString();
}
console.log(formatNumber(1234567890));
二、进阶版
function formatNumber(num){
//str.split('').reverse() => ["0", "9", "8", "7", "6", "5", "4", "3", "2", "1"]
return num.toString().split('').reverse().reduce((prev,next,index) => {
return ((index % 3) ? next : (next + ',')) + prev
})
}
console.log(formatNumber(1234567890));
三、正则版
function formatNumber(num) {
/*
①/\B(?=(\d{3})+(?!\d))/g:正则匹配非单词边界\B,即除了1之前的位置,其他字符之间的边界,后面必须跟着3N个数字直到字符串末尾
②(\d{3})+:必须是1个或多个的3个连续数字;
③(?!\d):第2步中的3个数字不允许后面跟着数字;
*/
return (num+'').replace(/\B(?=(\d{3})+(?!\d))/g, ',')
}
console.log(formatNumber(1234567890)) // 1,234,567,890
四、AIP版
(1)toLocaleString
function formatNumber(num){
return num.toLocaleString('en-US');
}
console.log(formatNumber(1234567890));
(2) Intl对象
function formatNumber(num){
return new Intl.NumberFormat().format(num);
}
console.log(formatNumber(1234567890));