将整数按千位划分,如将12345划分为“12,345”,方法有很多种,例如整除1000的次方取余法,正则多次匹配替换法(首先检查字符串中是否还包含4位整数,然后逐次替换),无论上面的那种方法,都需要进行多次while循环,本文试图提出一种不用循环就成千分位快速划分的方法。
解决的思路如下:
1. 首先将数字转换位字符串;
2. 对字符串的长度取余,划分首部与尾部;
3. 对尾部进行字符串替换;
4. 合并首部与尾部
具体代码如下:
function thSpliter(num) {
// 排除不需要替换的数字
if(num < 1000) {
return num;
}
var s = num + '',
fi = s.length % 3,
head = s.substr(0, fi),
// 全局替换正则表达式
reg = /(\d{3})/g,
// 替换全部
last = s.substr(fi).replace(reg, '$1,'),
len = last.length;
// 消除最后多余的逗号
last = last.substr(0, len - 1)
return [head, last].join()
}
在上面的实现中,相比于其他方法,新建的字符串只有两个,分别为head与last,尤其是对尾部数字的一次替换,在数据长度越长时,性能优势越明显。
结论
为了减少循环的次数,有时加强对数据的预处理,使其能够满足输入条件,也是一种值得考虑的方法。