我需要用另一个对象数组过滤一个对象数组,我发现它比我想象的要困难得多。
$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试验的小提琴手
答案 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,您可以执行以下操作;
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;