ng仅重复唯一值(合并重复项)

  • 本文关键字:合并 唯一 ng angularjs
  • 更新时间 :
  • 英文 :


我有一个类似的ng重复:

<option ng-repeat="item in items | orderBy:'priority'" 
    value="{{item.SAC}}.{{item.difficulty}}">
       {{item.SAC}}.{{item.difficulty}} - {{SACItem(item.SAC).description}}    
</option>

我希望它组合基于item.SACitem.difficulty的任何重复,如果这两个重复都是重复的重复,它们应该组合,否则它们可以分离。

我尝试了独特的过滤器,但我无法使它与2个变量一起工作。

您可以创建一个过滤器:

var app = angular.module('app', []);
app.controller('ctrl', function($scope) {
  $scope.items = [
    { name: 'john', age:45 },
    { name: 'tim', age: 36 },
    { name: 'bob', age: 44 },
    { name: 'john', age: 45 }
  ];
});
app.filter('unique', function() {
  
  var uniqueItems = [];
  function exists(item, parms) {
    return uniqueItems.some((i) => parms.every((p) => i[p] == item[p]));
  } 
  return function(arr, name, age) {
    
    if (arr) {
      uniqueItems.length = 0;
      angular.forEach(arr, function(item) {
        
        if (!exists(item, [name,age])) {
          uniqueItems.push(item);
        }
      });
      return uniqueItems;
    }
    return arr;
    
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/es5-shim/4.4.1/es5-shim.js"></script>
<div ng-app ="app" ng-controller="ctrl">
  <h1>Original Array</h1>
  <ul>
    <li ng-repeat="item in items">
      {{item.name }} - {{ item.age }}
    </li>
  </ul>
  <h1>Unique Array</h1>
  <ul>
    <li ng-repeat="item in items | unique:'name':'age'">
      {{item.name }} - {{ item.age }}
    </li>
  </ul>
</div>

您也可以在控制器中使用此过滤器,而不是视图:

app.controller('ctrl', function($scope, $filter) {
    var items = [...];
    $scope.items = $filter('unique')(items, 'name', 'age');
});

最新更新