我正在尝试比较“item”数组和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数组相比的任何异常 谢谢你的帮助
答案 0 :(得分: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 :(得分: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;
};