Javascript AngularJS筛选器唯一删除ng选项中的重复项
我有一个数组:Javascript AngularJS筛选器唯一删除ng选项中的重复项,javascript,html,angularjs,filter,ng-options,Javascript,Html,Angularjs,Filter,Ng Options,我有一个数组: $scope.arr1 = [option1, option2, option3, option1, option3] 我正在使用它填充选择选项: <select class="form-control" ng-model="arr1" ng-options="option for option in arr1"> <option value="" disabled>Please select an option</option
$scope.arr1 = [option1, option2, option3, option1, option3]
我正在使用它填充选择选项:
<select class="form-control" ng-model="arr1"
ng-options="option for option in arr1">
<option value="" disabled>Please select an option</option>
</select>
但是它给出的结果是空的Angular没有提供任何现成的过滤器来实现您所需要的 您尝试在arr1中使用
ng options=“option for option | unique:“option”
,但在angular中没有名为unique的筛选器
您可能希望以角度查看可用的过滤器
要获得所需的结果,您需要创建自定义过滤器来实现这一点。我在下面创建了一个片段,它将过滤常见值。这应该对你有用
var-app=angular.module(“myapp”,[]);
app.controller(“testCntrl”,函数($scope){
$scope.arr1=['option1','option2','option3','option1','option3'];
})
.filter(“removeDups”,函数(){
返回函数(数据){
if(角度isArray(数据)){
var结果=[];
var key={};
对于(变量i=0;i 0){
返回结果;
}
}
返回数据;
}
})
请选择一个选项
独特的
不包含在AngularJS中-与AngularUI上的旧版本捆绑在一起,并且似乎在网站上也很常见。您可以在应用程序中对其进行改装,推出自己的应用程序,或者包括一个提供模块。注意以下几点
ng-options="option for option in arr1 | unique"
/--AngularUI实现
.filter('unique',函数(){
返回函数(项目、过滤器){
if(filterOn==false){
退货项目;
}
如果((filterOn | | angular.isUndefined(filterOn))&angular.isArray(项目)){
var hashCheck={},newItems=[];
var extractValueToCompare=函数(项){
if(角度等高线(项目)和角度等高线(过滤器)){
返回项目[过滤器];
}否则{
退货项目;
}
};
角度。forEach(项目、功能(项目){
var值检查,isDuplicate=false;
对于(var i=0;i
-工作演示
ng-options="option for option in arr1 | unique"
// -- AngularUI implementation
.filter('unique', function () {
return function (items, filterOn) {
if (filterOn === false) {
return items;
}
if ((filterOn || angular.isUndefined(filterOn)) && angular.isArray(items)) {
var hashCheck = {}, newItems = [];
var extractValueToCompare = function (item) {
if (angular.isObject(item) && angular.isString(filterOn)) {
return item[filterOn];
} else {
return item;
}
};
angular.forEach(items, function (item) {
var valueToCheck, isDuplicate = false;
for (var i = 0; i < newItems.length; i++) {
if (angular.equals(extractValueToCompare(newItems[i]), extractValueToCompare(item))) {
isDuplicate = true;
break;
}
}
if (!isDuplicate) {
newItems.push(item);
}
});
items = newItems;
}
return items;
};
});