3가지 통합 조작 js 코드

7780 단어 js
/** */
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;
}

 
두 개의 질서정연한 20W 길이를 테스트한 수조의 병합 시간은 모두 15밀리초 이하이다.
다음은 몇 가지 경험이 있습니다(대량 조작을 할 때만 나타날 수 있습니다. 평소에 이런 최적화를 할 필요가 없습니다. 코드의 가독성은 제1원칙입니다)
1:수조의 concat 방법은 직접 for 순환push보다 느리다.
2:for 순환은while 순환보다 빠르다.
3:var a = b || 3;//이런 조작은 시간을 많이 소모한다
4:break,continue는 다시 순환할 필요가 없다는 것을 확인했을 때 시간이 많이 걸립니다.

좋은 웹페이지 즐겨찾기