以下是代码                    var arr1 = [{id:1},{id:2},{id:3},{id:4},{id:5}];
                    var arr2 = [{id:1},{id:2}];
                    var arr3 = [];
                    for(var i = 0;i < arr1.length;i++){
                        for(var j = 0;j < arr2.length;j++){
                            if(arr2[j].id != arr1[i].id){
                                arr3.push(arr1[i]);
                                break;
                            }
                        }
                    }
                    for(var k = 0;k < arr3.length;k++){
                        console.dir(arr3[k].id);
                    }我想arr3中的元素为[{id:3},{id:4},{id:5}],但结果还是[{id:1},{id:2},{id:3},{id:4},{id:5}];
这个要怎么解决呢?先谢谢大家啦!

解决方案 »

  1.   

    //合并
    for(var k in arr1){
        arr3[k] = arr1[k];
    }
    //求补集
    for(var k in arr2){
       if(arr3[k]){
           delete arr3[k];
       }else{
           arr3[k] = arr2[k];
       }
    }
      

  2.   


    [code=JScript]
    var arr1 = [{id:1},{id:2},{id:3},{id:4},{id:5}];
                        var arr2 = [{id:1},{id:2}];
                        var arr3 = [],b;
                        for(var i = 0;i < arr1.length;i++){
                            b=true;
                            for(var j = 0;j < arr2.length;j++){
                                if(arr2[j].id == arr1[i].id){
                                    b=false;
                                    break;
                                }
                            }
                            if(b)arr3.push(arr1[i])
                        }[/code]
      

  3.   


    var arr1 = [{id:1},{id:2},{id:3},{id:4},{id:5}];
        var arr2 = [{id:1},{id:2}];
        var arr3 = [],temp={};
        for(var i = 0;i < arr2.length;i++){
            temp[arr2[i].id]=!0;
        };
        for(var i = 0;i < arr1.length;i++){
            if(!temp[arr1[i].id]){
                arr3.push(arr1[i])
            }
        };
        for(var k = 0;k < arr3.length;k++){
            console.log(arr3[k].id);
        }
      

  4.   

    var arr1 = [{id:1},{id:2},{id:3},{id:4},{id:5}];                     
    var arr2 = [{id:1},{id:2}];                     
    var arr3 = [];                     
    for(var i = 0;i < arr1.length;i++){
    var flag = 0;
    for(var j = 0;j < arr2.length;j++){
    if(arr2[j].id == arr1[i].id){
    flag = 1;//我这个判断条件修改了
    break;
    }
    }

    if(!flag){
    arr3.push(arr1[i]);
    }
    }逻辑有些问题,考虑不全
    而且,你if之下的那个break只是跳出了if语句,不会跳出第二个for语句的,所以arr1[0]!=arr2[1]就会成立了,所以导致arr1[0]也被放入arr3数组了。