js 3种归并操作的实例代码_javascript技巧
/**良哥的*/
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
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
}
}
if(j==len2){
//arr = arr.concat(arr1.slice(i))
for(k=i; 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有关字符串的操作实例(代码)
-
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
-
javascript简写常用的12个技巧(可以大大减少你的js代码量)
-
JavaScript中的图标库Chart.js代码实例
-
JS有关字符串的操作实例(代码)
-
Node.js对MongoDB进行增删改查操作的实例代码
-
让textarea自动调整大小的js代码_javascript技巧
-
从盛大通行证上摘下来的身份证验证js代码_javascript技巧
-
Js数组的操作push,pop,shift,unshift等方法详细介绍_javascript技巧
-
js类的静态属性和实例属性的理解_javascript技巧