js共享的4种数字第一千格式方法
复制代码代码如下所示:
方法
功能少(NUM){
var结果= },计数器= 0;
Num =(NUM)。分裂(0 | |)。ToString(' ');
对于(var i = num.length - 1;我> = 0;我--){
计数器+;
result.unshift(Num {我});
如果(!(!(计数器% 3)i!= 0){ result.unshift(',');}
}
返回result.join('');
}
方法1的执行是将数字转换成字符串,然后将它们分散到数组中,然后从结束处将数组中的元素逐一插入新数组(结果)的开头。插入元素时,计数器计数一次(加上1)。当计数器是3的倍数时,插入一个逗号,但注意开始(i = 0)不需要逗号。最后,结果是通过调用新数组的连接方法获得的。
这个方法既清晰又易懂,在项目中也使用了一段时间,但直觉告诉我它做得不好。
方法二——方法一的字符串版本
复制代码代码如下所示:
两种方法
功能少(NUM){
var=,计数器= 0;
Num =(Num | |(0)ToString);
对于(var i = num.length - 1;我> = 0;我--){
计数器+;
结果:num.charat(我)+结果;
如果(!(!(计数器% 3)i!= 0){结果,+结果;}
}
返回结果;
}
方法二是方法1的改进版本,它不将字符串分割成数组,而且总是在字符串上操作。
方法三-三个数的循环结束匹配
复制代码代码如下所示:
三 /方法
功能少(NUM){
Var num(NUM = 0),| |)。ToString(RE = / D { 3 } $ /,结果=;
而(re.test(努姆)){
结果:regexp.lastmatch +结果;
如果(Num)!= regexp。lastmatch){
结果,+结果;
Num = regexp.leftcontext;
{人}
=;
打破;
}
}
如果(努姆){结果=数值+结果;}
返回结果;
}
三种方法是从算法完全不同,三号通过正则表达式在每个周期结束后,,,加一个逗号和匹配的内容转化为字符串的开头,然后匹配目标分配(民)不匹配的内容(regexp。leftcontext)。此外,我们还应注意:
1,如果数字是3的倍数,最后一个匹配必须是三个数字,但前三个数字不需要添加逗号。
2、如果数字不是3的倍数,则数值将最终留下1到2个数字。之后,将剩余的数字插入到结果字符串的开头。
尽管方法三减少了周期数(在一个周期处理中有三个字符),但是正则表达式的使用在一定程度上增加了消耗。
方法四-字符串版本三
复制代码代码如下所示:
四 /方法
功能少(NUM){
Var num(NUM = 0),| |)。ToString(结果=;
而(num.length > 3){
结果= ',' + num.slice(3)+结果;
Num = num.slice(0,num.length - 3);
}
如果(努姆){结果=数值+结果;}
返回结果;
}
事实上,截取三个字符结尾的函数可以通过切片,substr,或子方法的字符串类型。这可以让你避免使用正则表达式。
方法五除法结合法
复制代码代码如下所示:
五 /方法
功能少(NUM){
Var num(NUM = 0),| |)。ToString(温度= num.length % 3;
开关(温度){
案例1:
Num =分+ Num;
打破;
案例2:
Num = 0+数字;
打破;
}
返回num.match( / D { 3 } / g)。加入(',')。更换( / ^ 0 + /,);
}
首先,数字的数目乘以3倍。通过正则表达式,我们将它切成三个数字和一个组,然后通过联接方法添加逗号,最后去掉0的补码。
方法六懒惰法
复制代码代码如下所示:
六 /方法
功能少(NUM){
返回(0)。ToString(Num | |)(更换/( D)(=( D { 3 })/ g,1美元,+ $)');
}
人们一直认为这种格式可以通过正则表达式替换完成的,但它需要使用断言和其他的写作方法,但我不会用这部分非常熟悉。Ogle,你真的找到这样一个正则表达式,这估计是最短的代码实现。
测试结果
数
执行5000次(ms)的时间
方法1
方法二
方法三
方法四
方法五
方法六
一
四
一
三
一
十四
二
十
十四
一
三
零
七
二
一百
十二
一
二
四
五
三
一千
十三
二
三
二
九
五
一万
二十一
四
三
一
六
三
十万
二十一
三
二
一
五
六
方法1和方法二的比较表明,字符串运算的效率远远高于数组运算的效率。方法六的结果告诉我们,代码的长度与性能无关,方法四的综合性能最好(但为什么数字是100,性能降低了,这真的是不可解的),主要原因是:
1。比较方法一、二,每行3个字符而不是1个字符,减少循环次数;
2。比较方法三、五或六,没有使用正则表达式,减少消耗。
最后,我选择了方法四作为最后的优化,如果读者有更好的方法来实现或改进他们的观点,他们可以发表评论。