将一段数字从右到左每隔三位插入一个逗号
群里某个出的题目,听说来自某大公司的面试题,个人感觉是应该来自像土豆网显示用户数,播放数的需求。
window.onload = function (){ //整个测试由小刀提供 var testFun = function ( callback, str ){ var tipElem = document.createElement( 'div' ), startTime, duration = 0; for ( var j = 5; j > 0; j-- ){ startTime = + new Date(); for ( var i = 10000; i > 0; i-- ){ callback(); } duration = ((+ new Date()) - startTime) + duration; } duration = (duration / 5).toFixed(0); tipElem.innerHTML = str + '总耗时:' + duration + ' ms' ; document.body.appendChild( tipElem ); }; var str = '3345687687876789123' ; var cuter1 = function ( str ){ //带刀 var len = str.length, lastIndex, arr = []; while ( len > 0 ){ lastIndex = len; len -= 3; arr.unshift( str.substring(len, lastIndex) ); } return arr.join( ',' ); }; var cuter2 = function ( str ){ //abcd return str.replace( /\B(?=(?:\d{3})+$)/g, ',' ); }; var cuter3 = function ( str ){ //前叔 return str.replace(/(.*)(\d{3})$/, function (){ if (arguments[1]&& arguments[2]){ return arguments[1].replace(/(.*)(\d{3})$/,arguments.callee)+ "," +arguments[2]; } else { return arguments[0]; } }); }; var cuter4 = function ( str ){ //Alucelx return str.split( '' ).reverse().join( '' ).replace(/(\d{3})/g, '$1,' ).split( '' ).reverse().join( '' ); }; var cuter5 = function ( str ){ //司徒正美 var ret = []; while (str){ str = str.replace(/\d{1,3}$/g, function (a){ ret.unshift(a) return "" }); } return ret.join( "," ); }; var cuter6 = function ( str ){ //司徒正美 var n = str.length % 3; if (n){ return str.slice(0,n) + str.slice(n).replace(/(\d{3})/g, ',$1' ) } else { return str.replace(/(\d{3})/g, ',$1' ).slice(1) } }; var cuter7 = function (str){ //司徒正美 var ret = "" for ( var i = 0, n = str.length, m = n %3 - 1; i < n; i++){ ret += str.charAt(i) if ( i % 3 === m ){ ret += "," } } var e = ret.length - 1 return ret.charAt(e) == "," ? ret.slice(0,e) : ret } var cuter8 = function (str){ //[[valueOf]] var s2 = [].slice.call(str); for ( var i=s2.length-3; i>0;i-=3){ s2.splice(i, 0 , ',' ); } return s2.join( "" ) } var cuter9 = function (str){ //听说 var newStr= new Array(str.length+ parseInt(str.length/3)); newStr[newStr.length-1]=str[str.length-1]; var currentIndex=str.length-1; for ( var i = newStr.length-1;i >= 0;i--) { if ((newStr.length-i)%4==0) { newStr[i]= "," ; } else { newStr[i]=str[currentIndex--]; } } return newStr.join( "" ) } var cuter10 = function (str){ //Rekey var len = str.length, str2 = '' , max = Math.floor(len / 3); for ( var i = 0 ; i < max ; i++){ var s = str.slice(len - 3, len); str = str.substr(0, len - 3); str2 = ( ',' + s) + str2; len = str.length; } str += str2; return str } //下面是性能测试 testFun( function (){ cuter1(str); }, '方法一' ); testFun( function (){ cuter2(str); }, '方法二' ); testFun( function (){ cuter3(str); }, '方法三' ); testFun( function (){ cuter4(str); }, '方法四' ); testFun( function (){ cuter5(str); }, '方法五' ); testFun( function (){ cuter6(str); }, '方法六' ); testFun( function (){ cuter7(str); }, '方法七' ); testFun( function (){ cuter8(str); }, '方法八' ); testFun( function (){ cuter9(str); }, '方法九' ); testFun( function (){ cuter10(str); }, '方法十' ); } |
如果您觉得此文有帮助,可以打赏点钱给我支付宝1669866773@qq.com ,或扫描二维码
机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步