您好,欢迎访问一九零五行业门户网

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        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 在已确定不需要再循环时很耗时。
其它类似信息

推荐信息