由另一个数组

时间:2016-12-22 18:42:05

标签: javascript angularjs arrays filter

我需要用另一个对象数组过滤一个对象数组,我发现它比我想象的要困难得多。

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

我需要通过applicabilityID进行过滤并返回类似于以下内容的内容......

$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的函数,只删除ApplicabilityID并创建一个新的数组来过滤,但不确定这是否正确。

这不起作用,但这里是我设置为JSFiddler试验的小提琴手

2 个答案:

答案 0 :(得分:1)

试试这个过滤器 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;
        }

  });

答案 1 :(得分:1)

通过纯JS,您可以执行以下操作;

&#13;
&#13;
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)
&#13;
&#13;
&#13;