[英]Filter AngularJS Array by another Array
我需要用另一個對象數組過濾一個對象數組,這比我想象的要困難得多。
$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上進行實驗的提琴手
試試這個過濾器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;
}
});
通過純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.