ऊपर दिए गए स्वीकृत उत्तरों के अलावा मैंने अंडरस्कोर.जेएस लाइब्रेरी का उपयोग करके एक सामान्य 'ग्रुपबाय' फिल्टर बनाया।
JSFiddle (अद्यतन):
http://jsfiddle.net/TD7t3/
फ़िल्टर
app.filter('groupBy', function() {
return _.memoize(function(items, field) {
return _.groupBy(items, field);
}
);
});
'मेमोइज़' कॉल को नोट करें। यह अंडरस्कोर विधि फ़ंक्शन के परिणाम को कैश करती है और हर बार फिल्टर अभिव्यक्ति का मूल्यांकन करने से कोणीय को रोकती है, इस प्रकार कोणीय को पाचन पुनरावृत्तियों की सीमा तक पहुंचने से रोकती है।
एचटीएमएल
<ul>
<li ng-repeat="(team, players) in teamPlayers | groupBy:'team'">
{{team}}
<ul>
<li ng-repeat="player in players">
{{player.name}}
</li>
</ul>
</li>
</ul>
हम अपने 'GroupBy' फ़िल्टर को TeamPlayers स्कोप वैरिएबल पर, 'टीम' प्रॉपर्टी पर लागू करते हैं। हमारा एनजी-रिपीट (कुंजी, मान []) का एक संयोजन प्राप्त करता है जिसे हम अपने निम्नलिखित पुनरावृत्तियों में उपयोग कर सकते हैं।
11 जून 2014 को अपडेट करें
मैंने कुंजी के रूप में अभिव्यक्तियों के उपयोग के लिए फ़िल्टर द्वारा समूह का विस्तार किया (जैसे नेस्टेड चर)। कोणीय पार्स सेवा इसके लिए काफी उपयोगी है:
फ़िल्टर (अभिव्यक्ति समर्थन के साथ)
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 (क्रमबद्ध अभिव्यक्ति के साथ)
<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/