2016-06-10 47 views
0

我想比较,“项目”阵列和copyofOpList阵列中的项目copyofOpList从阵列比较它的其他阵列

检索数据出现删除数据,这是我尝试:

var _deleteUsedElement1 = function(item) { 

        for (var i = 0; i < item.length-1; i++){  
          for (var j = 0; j< $scope.copyofOpList.length-1; j++){ 
         if (item[i].operationCode == $scope.copyofOpList[j].code) { 
         $scope.copyofOpList.splice(j, 1); 

         } } } }; 

$scope.compareArrays = function() { 
    ...Get data from web Service 
    _deleteUsedElement1(item); 
    } 

copyofOpList数组有14个元素,而item数组有2个数组 但我的代码只删除了一个出现(第一个),所以请如何更正我的代码,以检索copyofOpList数组中的任何出现item array 感谢帮助

回答

3

我会尽量避免在循环中循环 - 这既不是非常优雅的,也不是一个非常有效的方式得到你想要的结果。

这里的东西更优雅,最有可能更有效:

var item = [1,2], copyofOpList = [1,2,3,4,5,6,7]; 

var _deleteUsedElement1 = function(item, copyofOpList) { 
    return copyofOpList.filter(function(listItem) { 
    return item.indexOf(listItem) === -1; 
    }); 
    }; 

    copyofOpList = _deleteUsedElement1(item, copyofOpList); 
    console.log(copyofOpList); 
    //prints [3,4,5,6,7] 
} 

而且因为我刚才注意到,您比较的对象的属性,下面是匹配对象属性过滤器版本:

var item = [{opCode:1},{opCode:2}], 
    copyofOpList = [{opCode:1},{opCode:2},{opCode:3},{opCode:4},{opCode:5},{opCode:6},{opCode:7}]; 

var _deleteUsedElement1 = function(item, copyofOpList) { 
     var iOpCodes = item.map(function (i) {return i.opCode;}); 
     return copyofOpList.filter(function(listItem) { 
     return iOpCodes.indexOf(listItem.opCode) === -1; 
     }); 
    }; 

copyofOpList = _deleteUsedElement1(item, copyofOpList); 
console.log(copyofOpList); 
//prints [{opCode:3},{opCode:4},{opCode:5},{opCode:6},{opCode:7}] 

这样做的另一个好处是你可以避免修改你的阵列,而你仍然在使用它们,这是JonSG和Furhan S.在答案中提到的一个积极影响。

+1

感谢先生的回复:) – Jina

+0

这就是非常优雅和简洁。虽然我想指出它仍然在循环中循环,因为indexOf()本身就是一个循环:) –

+0

随着您的编辑,这涵盖了我的答案,所以我将删除它。 – JonSG

2

拼接会改变你的阵列。使用新值的临时缓冲区数组是这样的:

var _deleteUsedElement1 = function(item) { 
    var _temp = []; 
    for (var i = 0; i < $scope.copyofOpList.length-1; i++){  
     for (var j = 0; j< item.length-1; j++){ 
      if ($scope.copyofOpList[i].code != item[j].operationCode) { 
       _temp.push($scope.copyofOpList[j]); 
      } 
     } 
    } 
    $scope.copyofOpList = _temp; 
}; 
+2

你测试过了吗?我认为它不会满足请求者的需求。 – Tex

+1

@Tex你是对的。第一次没有测试,希望编辑后的代码能够按照我的理解进行必要的操作。 Thnx指出。 –

+1

嘿,检查过滤器(),它是做你正在做什么_temp – JonSG