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;
  };
});