Is there any way to use an Angular filter to compare value with every value from an array?
有没有办法使用Angular过滤器将值与数组中的每个值进行比较?
Categories: <span ng-repeat="c in i.categories | filter: '!'+'myArray' ">{{c}}</span>
I would like to display values from i.categories
that are not in myArray
:
我想显示i.categories中不在myArray中的值:
$scope.i = {
categories: [
"Europe & Eurasia",
"Featured",
"Headlines",
"Middle East",
"News",
"NEWS BY TOPIC",
"News Categories",
"REGIONAL NEWS"
]
};
$scope.myArray = ['Featured', 'Headlines', 'News'];
I want to get everything from c
which is not contained in the myArray
.
我想从c中获取未包含在myArray中的所有内容。
I've tried with writing some functions, but I get my app really slow, because of a lot requests.
我尝试过编写一些函数,但由于请求很多,我的应用程序确实很慢。
So, can I just somehow pass my array, and let Angular goes through every single item in that array and compare it with the current value?
那么,我可以以某种方式传递我的数组,让Angular遍历该数组中的每一项并将其与当前值进行比较吗?
2 个解决方案
#1
3
You can try to use a custom filter, like the following:
您可以尝试使用自定义过滤器,如下所示:
angular.module('myApp', []).filter('notInArray', function($filter) {
return function(list, arrayFilter) {
if(arrayFilter) {
return $filter("filter")(list, function(listItem) {
return arrayFilter.indexOf(listItem) == -1;
});
}
};
});
Use it like this:
像这样用它:
<div ng-repeat='c in i.categories | notInArray:myArray'>{{c}}</div>
JSFiddle demo
angular.module('Test', []).filter('notInArray', function($filter) {
return function(list, arrayFilter) {
if(arrayFilter) {
return $filter("filter")(list, function(listItem) {
return arrayFilter.indexOf(listItem) == -1;
});
}
};
});
function Ctrl($scope) {
$scope.i = {categories: [
"Europe & Eurasia",
"Featured",
"Headlines",
"Middle East",
"News",
"NEWS BY TOPIC",
"News Categories",
"REGIONAL NEWS"
]};
$scope.myArray = ['Featured', 'Headlines', 'News'];
}
<!DOCTYPE html>
<html ng-app='Test'>
<head>
<script src="http://code.angularjs.org/1.1.1/angular.min.js"></script>
<meta charset=utf-8 />
</head>
<body ng-controller='Ctrl'>
<div ng-repeat='c in i.categories | notInArray:myArray'>{{c}}</div>
</body>
</html>
#2
1
You can use like this also.
你也可以这样使用。
angular.module('App.filters', []).filter('companyFilter', [function () {
return function (arr, selArr) {
var retArr = [];
angular.forEach(arr, function(v, k){
var found =0;
for(var i=0; i<selArr.length; i++){
if(selArr[i] == v.name){
found = 1;
break;
}
}
if(found == 0){
retArr.push(v);
}
})
return retArr;
};
}]);
<div ng-controller="MyCtrl">
<div ng-repeat="c in categories|filter:customFilter">
{{c}}
</div>
</div>
#1
3
You can try to use a custom filter, like the following:
您可以尝试使用自定义过滤器,如下所示:
angular.module('myApp', []).filter('notInArray', function($filter) {
return function(list, arrayFilter) {
if(arrayFilter) {
return $filter("filter")(list, function(listItem) {
return arrayFilter.indexOf(listItem) == -1;
});
}
};
});
Use it like this:
像这样用它:
<div ng-repeat='c in i.categories | notInArray:myArray'>{{c}}</div>
JSFiddle demo
angular.module('Test', []).filter('notInArray', function($filter) {
return function(list, arrayFilter) {
if(arrayFilter) {
return $filter("filter")(list, function(listItem) {
return arrayFilter.indexOf(listItem) == -1;
});
}
};
});
function Ctrl($scope) {
$scope.i = {categories: [
"Europe & Eurasia",
"Featured",
"Headlines",
"Middle East",
"News",
"NEWS BY TOPIC",
"News Categories",
"REGIONAL NEWS"
]};
$scope.myArray = ['Featured', 'Headlines', 'News'];
}
<!DOCTYPE html>
<html ng-app='Test'>
<head>
<script src="http://code.angularjs.org/1.1.1/angular.min.js"></script>
<meta charset=utf-8 />
</head>
<body ng-controller='Ctrl'>
<div ng-repeat='c in i.categories | notInArray:myArray'>{{c}}</div>
</body>
</html>
#2
1
You can use like this also.
你也可以这样使用。
angular.module('App.filters', []).filter('companyFilter', [function () {
return function (arr, selArr) {
var retArr = [];
angular.forEach(arr, function(v, k){
var found =0;
for(var i=0; i<selArr.length; i++){
if(selArr[i] == v.name){
found = 1;
break;
}
}
if(found == 0){
retArr.push(v);
}
})
return retArr;
};
}]);
<div ng-controller="MyCtrl">
<div ng-repeat="c in categories|filter:customFilter">
{{c}}
</div>
</div>