js 3种归并操作的实例代码

 更新时间:2013年10月30日 16:05:47   作者:  
这篇文章介绍了js 3种归并操作的实例代码,有需要的朋友可以参考一下

第一种:

复制代码 代码如下:

/**良哥的*/
function merge(a, b) {
    var aLen = a.length,
        bLen = b.length,
        maxLen = Math.max(aLen, bLen),
        sumLen = aLen + bLen,
        result = [],
        ap = 0,
        bp = 0;

     while (result.length < sumLen) {
        if (ap < aLen && bp < bLen) {
            if(a[ap] > b[bp]){
                result.push(b[bp++]);
            } else {
                result.push(a[ap++]);
            }
        } else if (!(ap < aLen)){
            while(bp < bLen){
                result.push(b[bp++]);
            }
        } else if (!(bp < bLen)){
            while(ap < aLen){
                result.push(a[ap++]);
            }
        }
    }
    return result;
}

第二种:

复制代码 代码如下:

/**鲁军*/
function merge(arr1, arr2){

    var i = 0;
    var j = 0;
    var c = 0;
    var k;
    var len1 = arr1.length;
    var len2 = arr2.length;
    var arr = [];
    for(;i<len1 && j<len2;){
        if( arr1[i] > arr2[j]  ){
            arr.push( arr2[j] );
            j++;
        }else{
            arr.push( arr1[i] );
            i++;
        }
        //if(i==len1 || j==len2){
        //    break;
        //}
    }

    if(i==len1){
        //arr = arr.concat(arr2.slice(j));

        for(k=j; k<len2; k++){
            arr.push( arr2[k] );
        }
    }

    if(j==len2){
        //arr = arr.concat(arr1.slice(i))
        for(k=i; k<len1; k++){
            arr.push( arr1[k] );
        }

    }

    return arr;
}

第三种:

复制代码 代码如下:

/*金锐的*/
function merge(a,b){
    var x = 0;
    var l = 0;
    var list = [];
    var aLen = a.length;
    var bLen = b.length;

    for(var i = 0; i < bLen; i++){
        for(var j = x; j < aLen; j++){
            if(b[i] < a[j]){
                list.push(b[i]);
                l = i;
                break;
            }else{               
                list.push(a[j]);
                x++;
            }
        }    
    }           

    if(x == a.length){
        for(var y = l; y < bLen; y++){
            list.push(b[y]);
        }
    }else{
        for(var z = x; z < aLen; z++){
            list.push(a[z]);
        }
    }

    return list;
}

经过测试2个有序20W长度的数组归并耗时都在15毫秒以下。

以下有几条经验(在大量操作的时候才能体现,平时不需要做这样的优化。代码可读性还是第一原则)

1:数组的concat方法比直接for循环push要慢。

2:for循环比while循环快。

3:var a = b || 3; //这种操作很消耗时间

4: break,continue 在已确定不需要再循环时很耗时。

相关文章

  • js模拟实现烟花特效

    js模拟实现烟花特效

    这篇文章主要为大家详细介绍了js模拟实现烟花特效,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • 原生JS:Date对象全面解析

    原生JS:Date对象全面解析

    下面小编就为大家带来一篇原生JS:Date对象全面解析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • 在webstorm中配置less的方法详解

    在webstorm中配置less的方法详解

    这篇文章主要介绍了在webstorm中配置less的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-09-09
  • 让多个输入框中的内容同时变化的js代码

    让多个输入框中的内容同时变化的js代码

    怎么样让多个输入框中的内容同时变化?一般又要兼容IE与firefox
    2010-01-01
  • JavaScript类的继承操作实例总结

    JavaScript类的继承操作实例总结

    这篇文章主要介绍了JavaScript类的继承操作,结合实例形式总结分析了JavaScript面向对象程序设计中类的继承常见实现方式与操作技巧,需要的朋友可以参考下
    2018-12-12
  • 显示/隐藏侧边栏

    显示/隐藏侧边栏

    显示/隐藏侧边栏...
    2006-10-10
  • 深入理解js函数的作用域与this指向

    深入理解js函数的作用域与this指向

    下面小编就为大家带来一篇深入理解js函数的作用域与this指向。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • 原生JS实现酷炫分页效果

    原生JS实现酷炫分页效果

    这篇文章主要为大家详细介绍了原生JS实现酷炫分页效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • JS获取iframe中marginHeight和marginWidth属性的方法

    JS获取iframe中marginHeight和marginWidth属性的方法

    这篇文章主要介绍了JS获取iframe中marginHeight和marginWidth属性的方法,涉及javascript操作iframe属性的技巧,并分析了marginHeight和marginWidth属性的功能,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法

    JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法

    这篇文章主要介绍了JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法,涉及针对字符串参数的处理方法,需要的朋友可以参考下
    2016-08-08

最新评论