js共享的4种数字第一千格式方法

js共享的4种数字第一千格式方法
所谓的数字第一千位形式,即从数字的数目,在每三位之间加一个逗号。例如,10000。为了响应这个要求,我最初写了一个函数:

复制代码代码如下所示:

方法

功能少(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。比较方法三、五或六,没有使用正则表达式,减少消耗。

最后,我选择了方法四作为最后的优化,如果读者有更好的方法来实现或改进他们的观点,他们可以发表评论。

tag:方法种数格式第一千电脑软件

相关内容