如果一个键匹配,如何删除数组元素

How to remove array element if one key match?

本文关键字:何删除 删除 数组元素 一个 如果      更新时间:2023-10-24

基本上它的数据剑道网格默认数据的来源是selVal,如果selVal中的任何键与dtoVal匹配,我想删除所有内容从selVa,是否可以用下面的代码实现它不从数组中删除selVal元素。知道吗?

ctrl.js

$scope.handleControlOwnerCancel = function(){
                this.ctrlOwnerModal.close();
                var dtoVal = $scope.controlDTO.controlOwners;
                var selVal = $scope.selectedOwners;
                for (var i = 0; i < dtoVal.length; i++) {
                  for (var j=0; j<selVal.length; j++)  {
                   if (dtoVal[i].workerKey  !== selVal[j].workerKey) {
                     $scope.selectedOwners = $scope.controlDTO.controlOwners;
                     controlOwnersDataSource();
                    }
                  }
                }
            };

最好使用angular.forEach,而不是使用for循环。你还说

如果selval中的任何键与我要删除的dtoVal匹配selVa 的一切

但在循环内部,您正在使用!==进行检查。我不知道哪一个正是你的要求。但你可以尝试这样做:

$scope.handleControlOwnerCancel = function(){
    this.ctrlOwnerModal.close();
    //var dtoVal = $scope.controlDTO.controlOwners;
    //var selVal = $scope.selectedOwners;
    var match = 0;
    angular.forEach($scope.selectedOwners, function(val, key){
        angular.forEach($scope.controlDTO.controlOwners, function(val2, key2){
            if(val.workerKey==val2.workerKey){
                match++;
            }
        })          
    })
    if(match>0){
        $scope.selectedOwners = $scope.controlDTO.controlOwners;
        controlOwnersDataSource();
    }
};

试试这个

$scope.handleControlOwnerCancel = function(){
  this.ctrlOwnerModal.close();
  var dtoVal = $scope.controlDTO.controlOwners;
  var selVal = $scope.selectedOwners;
  var selValCopy = angular.copy(selVal);
  for (var i=dtoVal.length-1; i>=0; i--) {
    for (var j=selVal.length-1; j>=0; j--)  {
      if (dtoVal[i].workerKey  === selVal[j].workerKey) {
        selValCopy.splice(j, 1);
      } else {
        $scope.selectedOwners = $scope.controlDTO.controlOwners;
        controlOwnersDataSource();
      }
    }
  }
  selVal  = selValCopy;
};