前言,面試中遇到將數字增加“,”,方便區分位數,這里記錄一下,以便后續用到
1、正則表達式:正則替換
// 正則表達式 const toThousands = (num = 0) => { return num.toString().replace(/\d+/, function(n) { return n.replace(/(\d)(?=(?:\d{3})+$)/g, '$1,'); }); };
console.log(toThousands(1234567890.111)); //1,234,567,890.111
2、字符串排序:倒序排列
// 字符串遞歸方法 const toThousands = (num = 0) => { let result = ''; let numArr = num.toString().split('.'); let int = numArr[0]; let decmial = numArr[1] ? '.' + numArr[1] : ''; for (let n = int.length - 1; n >= 0; n--) { result += int[int.length - n - 1]; if ((int.length - n - 1) % 3 === 0 && n !== 0) { result += ','; } } return result + decmial; }; console.log(toThousands(1234567890.111)); //1,234,567,890.111
3、字符串模板:使用slice不斷截取,不斷分割
function toThousands(num = 0) { let result = ''; let numArr = num.toString().split('.'); let int = numArr[0]; let decmial = numArr[1] ? '.' + numArr[1] : ''; while (int.length > 3) { result = ',' + int.slice(-3) + result; int = int.slice(0, int.length - 3); } if (int) { result = int + result; } return result + decmial; } console.log(toThousands(1234567890.111));
綜上所述,計算所耗時間,可見一個問題代碼短不一定性能就好,推薦使用第二種方法
方法一 | 方法二 | 方法三 |
1.822 | 0.104 | 0.118 |