一、普通版
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));