这道题目的题干是:
给一个字符串数字,让你在它的千分位加点。
题目很简单,很多人可能很快就能想出来答案,我也是的:
将字符串从右往左读,读入一个新的字符串,读三个,如果下一个还有数字,放一个“,”。然后就跟面试官说了。
答案我先不揭晓,请读者先自己想想看:会不会有坑?有哪些隐形的需求要考虑到?字符串处理能不能用RegExp?
。。。。。。。。。
好,如果读者想完了,就往下看吧。
这儿有3个隐性的需求
1,确定是数字(用isNaN来判断)
2,考虑负数情况
3,考虑小数的情况
所以面试大公司,很注重的是你的思维严密性
下面给读者一个用正则处理的方法
var string= "12311341234234.123";
var temp = string.split('.');//考虑小数
var toDo;//用来读取整数部分
if(temp.length==2)
//如果是小数
toDo = temp[0];
else
//如果不是小数
toDo = temp;
var newOne = "";//当作返回值
/*
/\d{3}$/ 匹配执行匹配操作的字符串最后3位的数字,有点拗口,读两遍就能看懂
*/
while(toDo.match(/\d{3}$/)){
var mat = toDo.match(/\d{3}$/);
newOne = newOne.concat(","+mat[0]);
console.log(newOne);
toDo = toDo.slice(0,mat.index);
}
newOne = toDo.concat(newOne);
console.log(newOne+"."+temp[1]);