• 将一段数字从右到左每隔三位插入一个逗号


    群里某个出的题目,听说来自某大公司的面试题,个人感觉是应该来自像土豆网显示用户数,播放数的需求。

    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);
        }, '方法十' );
    }
    
  • 相关阅读:
    day02_07 创建新目录
    day02_04 字典
    day02_02 列表切割
    day03_01 文件操作
    MS的TREE 控件使用
    使用自定义用户控件的一些经验
    Asp.net开发心得点滴[动态加载的用户控件使用事件委托,交给页面处理的事件无效问题]
    正则表达式基础学习[1]
    自定义控件无法在VS.net编辑中显示
    错误的递归
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/2424215.html
Copyright © 2020-2023  润新知