简体   繁体   English

用另一个数组过滤AngularJS数组

[英]Filter AngularJS Array by another Array

I need to filter an array of objects by another array of objects, which I am finding more difficult than I thought it would be. 我需要用另一个对象数组过滤一个对象数组,这比我想象的要困难得多。

$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
}];

I need to filter by the applicabilityID and return something similar to what is below... 我需要按applicabilityID进行过滤,并返回类似于下面的内容...

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

If that array was simpler I could do it this way.. 如果那个数组更简单,我可以这样做。

var notWhatIWant = [ 222, 444 ];

$scope.FiterByArray = function(e) {
  return FiterByArray.indexOf(e.ApplicabilityID) === -1;
}

<div ng-repeat="a in ArrayMain | filter: FiterByArray">
  {{ a }}
</div>

This doesn't work with the FiterByArray. 这不适用于FiterByArray。 I have considered creating a function that loops through the FilterByArray and removed just the ApplicabilityID and creates a new array to filter against, but not sure that is the correct approach for this. 我已经考虑过创建一个遍历FilterByArray的函数,并删除了ApplicabilityID并创建了一个新的数组进行过滤,但是不确定这是否是正确的方法。

This doesn't work but here is the fiddler I setup to experiment on JSFiddler 这不起作用,但这是我设置的在JSFiddler上进行实验的提琴手

Try this filter https://jsfiddle.net/17jtu5r5/5/ 试试这个过滤器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;
        }

  });

By pure JS you may do as follows; 通过纯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) 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM