我有这样的重复:
<option ng-repeat="item in items | orderBy:'priority'"
value="{{item.SAC}}.{{item.difficulty}}">
{{item.SAC}}.{{item.difficulty}} - {{SACItem(item.SAC).description}}
</option>
我希望它能够根据item.SAC
和item.difficulty
组合任何重复项,如果这两个副本都是重复它们应该组合在一起,否则它们可能是分开的。
我尝试了独特的过滤器,但我无法使用2个变量。
答案 0 :(得分:1)
您可以创建过滤器:
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;
}
});
&#13;
<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>
&#13;
您也可以在控制器中使用此过滤器而不是视图:
app.controller('ctrl', function($scope, $filter) {
var items = [...];
$scope.items = $filter('unique')(items, 'name', 'age');
});