欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

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

程序员文章站 2022-04-23 10:53:43
...
第一种:
复制代码 代码如下:

/**良哥的*/
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 if (ap if(a[ap] > b[bp]){
result.push(b[bp++]);
} else {
result.push(a[ap++]);
}
} else if (!(ap while(bp result.push(b[bp++]);
}
} else if (!(bp while(ap 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 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 arr.push( arr2[k] );
}
}

if(j==len2){
//arr = arr.concat(arr1.slice(i))
for(k=i; 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 for(var j = x; j if(b[i] list.push(b[i]);
l = i;
break;
}else{
list.push(a[j]);
x++;
}
}
}

if(x == a.length){
for(var y = l; y list.push(b[y]);
}
}else{
for(var z = x; 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 归并操作