源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-08-09 14:50 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:js 3种归并操作的实例代码
第一种:
[u]复制代码[/u] 代码如下:
/**良哥的*/ 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; }
第二种:
[u]复制代码[/u] 代码如下:
/**鲁军*/ 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; }
第三种:
[u]复制代码[/u] 代码如下:
/*金锐的*/ 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 在已确定不需要再循环时很耗时。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部