JS千分位格式化方法,以及多種方法性能比較
阿新 • • 發佈:2019-04-23
das 表達式 比較 wid asc 格式化 table 每次 測試結果
方法一字符串版
function toThousands(num) { var result = ‘‘, counter = 0; num = (num || 0).toString(); for (var i = num.length - 1; i >= 0; i--) { counter++; result = num.charAt(i) + result; if (!(counter % 3) && i != 0) { result = ‘,‘ + result; } } return result; }
方法二——正則版
function toThousands(num) { return (num || 0).toString().replace(/(\d)(?=(?:\d{3})+$)/g, ‘$1,‘); }
方法三——每次截取三位末尾字符串
function toThousands(num) { var num = (num || 0).toString(), result = ‘‘; while (num.length > 3) { result = ‘,‘ + num.slice(-3) + result; num = num.slice(0, num.length - 3); } if (num) { result = num + result; } return result; }
方法四——toLocaleString
(‘2525235235235325‘).toLocaleString()
測試結果
數字 | 執行50000次消耗的時間(ms) | |||
---|---|---|---|---|
方法一 | 方法二 | 方法三 | 方法四 | |
1 | 28 | 231 | 24 | 27 |
10 | 37 | 199 | 25 | 28 |
100 | 46 | 214 | 24 | 27 |
1000 | 57 | 304 | 49 | 26 |
10000 | 65 | 293 | 49 | 27 |
100000 | 75 | 307 | 55 | 28 |
方法四性能最好.但我暫時並不會使用,因為:
註意:使用方法四有2個問題:
1:要先把數字轉化成字符串才能達到表格所示的消耗時間.直接操作數據效率會打折.
2.在我華為的手機上有bug,並不會轉化加逗號,還是原模原樣展現.應該是機型太老舊問題,現在手機應該沒問題,以後兼容沒問題肯定首選.
方法二的測試結果告訴我們,代碼長短跟性能高低沒有關系。方法三的綜合性能是最好的:
- 對比方法一,每次操作3個字符而不是1個字符,減少循環次數;
- 對比方法二,使用正則表達式,最浪費性能。
最後,我選擇了方法三作為最終的優化方案。
JS千分位格式化方法,以及多種方法性能比較