উপরে গৃহীত উত্তরগুলি ছাড়াও আমি আন্ডারস্কোর.জেএস লাইব্রেরি ব্যবহার করে একটি জেনেরিক 'গ্রুপ বাই' ফিল্টার তৈরি করেছি।
জেএসফিডেল (আপডেট হয়েছে):
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>
আমরা টিমপ্লেয়ার স্কোপ ভেরিয়েবল, 'টিম' সম্পত্তিতে আমাদের 'গ্রুপবাই' ফিল্টার প্রয়োগ করি। আমাদের এনজি-রিপিট (কী, মানগুলি []) এর সংমিশ্রণটি গ্রহণ করে যা আমরা আমাদের নিম্নলিখিত পুনরাবৃত্তিতে ব্যবহার করতে পারি।
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}];
});
এইচটিএমএল (সাজ্ট বাই এক্সপ্রেশন সহ)
<li ng-repeat="(team, players) in teamPlayers | groupBy:'team.name'">
{{team}}
<ul>
<li ng-repeat="player in players">
{{player.name}}
</li>
</ul>
</li>
জেএসফিডাল:
http://jsfiddle.net/k7fgB/2/