通过另一个数组过滤angularjs数组



我需要通过另一个对象来过滤一个对象,我发现这比我想象的要困难得多。

$scope.ArrayMain = [{
  "LocationID": 1,
  "AdornmentID": 11,
  "ApplicabilityID": 111
},{
  "LocationID": 2,
  "AdornmentID": 22,
  "ApplicabilityID": 222
},{
  "LocationID": 3,
  "AdornmentID": 33,
  "ApplicabilityID": 333
},{
  "LocationID": 4,
  "AdornmentID": 44,
  "ApplicabilityID": 444
}];
var FiterByArray = [{
  "filterID": 1,
  "ApplicabilityID": 222
},{
  "FilterID": 2,
  "ApplicabilityID": 444
}];

我需要滤除适用性,然后返回类似于下面的东西...

$scope.filteredList = [{
  "LocationID": 1,
  "AdornmentID": 11,
  "ApplicabilityID": 111
},{
  "LocationID": 3,
  "AdornmentID": 33,
  "ApplicabilityID": 333
}]

如果那个数组更简单,我可以这样做。

var notWhatIWant = [ 222, 444 ];
$scope.FiterByArray = function(e) {
  return FiterByArray.indexOf(e.ApplicabilityID) === -1;
}
<div ng-repeat="a in ArrayMain | filter: FiterByArray">
  {{ a }}
</div>

这与fiterByArray不起作用。我已经考虑过创建一个通过FilterByArray循环的函数,并仅删除了适用性ID,并创建了一个新数组以过滤,但不确定这是正确的方法。

这是行不通的,但是这是我设置的提琴手,可以在JSFIDDLER上进行实验

由pure JS您可以按照以下方式进行;

var ArrayMain = [{     "LocationID": 1,
                      "AdornmentID": 11,
                  "ApplicabilityID": 111
                 },
                 {     "LocationID": 2,
                      "AdornmentID": 22,
                  "ApplicabilityID": 222
                 },
                 {     "LocationID": 3,
                      "AdornmentID": 33,
                  "ApplicabilityID": 333
                 },
                 {     "LocationID": 4,
                      "AdornmentID": 44,
                  "ApplicabilityID": 444
                 }
                ],
 FiterByArray = [{        "filterID": 1,
                   "ApplicabilityID": 222},
                 {        "filterID": 2,
                   "ApplicabilityID": 444}
                ],
  resultArray = ArrayMain.filter(e => !FiterByArray.some(f => f.ApplicabilityID === e.ApplicabilityID));
console.log(resultArray)

尝试此过滤器https://jsfiddle.net/17jtu5r5/5/

 angular.module('myApp', [])
  .controller('myCtrlr', ['$scope', function($scope) {
    $scope.ArrayMain = [{
      "LocationID": 1,
      "AdornmentID": 11,
      "ApplicabilityID": 111
    }, {
      "LocationID": 2,
      "AdornmentID": 22,
      "ApplicabilityID": 222
    }, {
      "LocationID": 3,
      "AdornmentID": 33,
      "ApplicabilityID": 333
    }, {
      "LocationID": 4,
      "AdornmentID": 44,
      "ApplicabilityID": 444
    }];
/*
    var FiterByArray = [ 222, 444 ];
*/
    var FiterByArray = [ {
      "filterID": 1,
      "ApplicabilityID": 222
    },{
      "FilterID": 2,
      "ApplicabilityID": 444
    }];

  }]).filter('myFilter',function(){
   return function (items) {
          var obj = items.filter(function(x){
           return x.ApplicabilityID  === 111
           });
           return obj;
        }
  });

最新更新