Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
var s = i.toString();
var o = [];
var l = s.length;
var off = l % 3;
var groups = Math.floor(l / 3);
var x;
if (off) {
o.push(s.slice(0, off));
}
for (x = 0; x < groups; x++) {
o.push(s.slice(off, off += 3));
}
var result = o.join("'");
console.log(result)
Хром:
regex: 985.489ms
nativeSlice: 393.228ms
regex: 1030.108ms
nativeSlice: 398.542ms
regex: 1016.810ms
nativeSlice: 412.375ms
Firefox:
regex: 608.23ms
nativeSlice: 999.5ms
regex: 573.7ms
nativeSlice: 898.71ms
regex: 613.18ms
nativeSlice: 933.68ms
IE:
regex: 1 766,432 мс
nativeSlice: 1 702,35 мс
regex: 1 651,024 мс
nativeSlice: 1 684,765 мс
regex: 1 760,125 мс
nativeSlice: 1 690,707 мс
Node.js:
regex: 667ms
nativeSlice: 374ms
regex: 748ms
nativeSlice: 392ms
regex: 764ms
nativeSlice: 380ms
function mathPower (num){
if (num < 999)
return num;
return mathPower(~~(num / 1000)) + "'"
+ ("00"+(~~(num % 1000))).substr(-3,3);
}
Node.Js
[ 0, 64840650 ]
[ 0, 16904683 ]
[ 0, 14002223 ]
[ 0, 15718417 ]
Chrome
80
102
101
98
Firefox
218
214
218
239
IE
215
193
204
186
… если вы знаете нужную локаль заранее, лучше воспользоваться заменой по регулярному выражению…
new Intl.NumberFormat([locales[, options]])
var s = i.toString();
var l = s.length;
var result = '';
if (l > 15) result += s.slice(-18, -15) + "'";
if (l > 12) result += s.slice(-15, -12) + "'";
if (l > 9) result += s.slice(-12, -9) + "'";
if (l > 6) result += s.slice(-9, -6) + "'";
if (l > 3) result += s.slice(-6, -3) + "'";
result += s.slice(-3);
Number.MAX_SAFE_INTEGER? Интересное практичное упрощение.Хром:
80
99
97
99
Firefox:
218
599
633
656
IE:
215
377
370
358
Node.js:
[ 0, 64840650 ]
[ 0, 46075947 ]
[ 0, 53800444 ]
[ 0, 43452631 ]
function fmt(n) {
n = n.toString();
const l = n.length;
var s='',
i=0;
while(i<l){
if((l-i)%3 || !i){
s+=n[i++];
}else{
s+=','+n[i++];
}
}
return s;
}
Node.Js
[ 0, 72634428 ]
[ 0, 35303136 ]
[ 0, 73739665 ]
[ 0, 38605069 ]
[ 0, 85149363 ]
[ 0, 39749604 ]
Chrome
98
36
119
36
91
34
Firefox
214
185
224
186
220
182
IE
186
266
175
277
185
302
function fmt2(n) {
var s='';
while(n){
s=('000'+n%1000).slice(n>=1000 ? -3 : -n.toString().length)+s;
n=n/1000|0;
if(n) {
s=','+s;
}
}
return s;
}



var pattern = new RegExp('\B(?=(?:\d{3})+$)', 'g');
i.toString().replace( pattern , ',' ); //А это в цикле
и он оказался довольно быстрым, а в тестах на Firefox даже занял первое место.Я вижу, что во всех браузерах, кроме IE11,
slice_concatenate имеет наибольшую скорость работы. exhaustion на 3-5 местах. Может, я не туда смотрю?
Скорость локального форматирования чисел