위의 허용 된 답변 외에도 underscore.js 라이브러리를 사용하여 일반 'groupBy'필터를 만들었습니다.
JSFiddle (업데이트 됨) :
http://jsfiddle.net/TD7t3/
필터
app.filter('groupBy', function() {
return _.memoize(function(items, field) {
return _.groupBy(items, field);
}
);
});
'memoize'호출에 유의하십시오. 이 밑줄 방법은 함수의 결과를 캐시하고 각도가 필터 표현을 평가할 때마다 각도를 중지하여 각도가 다이제스트 반복 한계에 도달하지 못하게합니다.
HTML
<ul>
<li ng-repeat="(team, players) in teamPlayers | groupBy:'team'">
{{team}}
<ul>
<li ng-repeat="player in players">
{{player.name}}
</li>
</ul>
</li>
</ul>
'team'속성의 teamPlayers 범위 변수에 'groupBy'필터를 적용합니다. ng-repeat는 다음 반복에서 사용할 수있는 (키, 값 []) 조합을받습니다.
2014 년 6 월 11 일 업데이트
저는 식을 키로 사용하는 것을 설명하기 위해 필터를 기준으로 그룹을 확장했습니다 (예 : 중첩 변수). 각도 파싱 서비스는 다음과 같이 매우 편리합니다.
필터 (표현식 지원)
app.filter('groupBy', function($parse) {
return _.memoize(function(items, field) {
var getter = $parse(field);
return _.groupBy(items, function(item) {
return getter(item);
});
});
});
컨트롤러 (중첩 된 객체 포함)
app.controller('homeCtrl', function($scope) {
var teamAlpha = {name: 'team alpha'};
var teamBeta = {name: 'team beta'};
var teamGamma = {name: 'team gamma'};
$scope.teamPlayers = [{name: 'Gene', team: teamAlpha},
{name: 'George', team: teamBeta},
{name: 'Steve', team: teamGamma},
{name: 'Paula', team: teamBeta},
{name: 'Scruath of the 5th sector', team: teamGamma}];
});
html (sortBy 표현식 사용)
<li ng-repeat="(team, players) in teamPlayers | groupBy:'team.name'">
{{team}}
<ul>
<li ng-repeat="player in players">
{{player.name}}
</li>
</ul>
</li>
JSFiddle :
http://jsfiddle.net/k7fgB/2/