Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I group by multiple fields using Angular-Filter?

I'm using Angular-Filter's groupBy filter.

Example from GitHub:

$scope.players = [
  {name: 'Gene', team: 'alpha'},
  {name: 'George', team: 'beta'},
  {name: 'Steve', team: 'gamma'},
  {name: 'Paula', team: 'beta'},
  {name: 'Scruath', team: 'gamma'}
];

<ul>
  <li ng-repeat="(key, value) in players | groupBy: 'team'">
    Group name: {{ key }}
    <ul>
      <li ng-repeat="player in value">
        player: {{ player.name }}
      </li>
    </ul>
  </li>
</ul>

So, the example groups the players collection by team. Imagine there's an age property for every player object:

$scope.players = [
  {name: 'Gene', team: 'alpha', age: 19},
  {name: 'George', team: 'beta', age: 19},
  {name: 'Steve', team: 'gamma', age: 23},
  {name: 'Paula', team: 'beta', age: 23},
  {name: 'Scruath', team: 'gamma', age: 23}
];

I want to group by team and age. How can I do that?

like image 948
Yulian Avatar asked Mar 25 '16 16:03

Yulian


People also ask

How does filter work in angular?

The “filter” Filter in AngularJS is used to filter the array and object elements and return the filtered items. In other words, this filter selects a subset (a smaller array containing elements that meet the filter criteria) of an array from the original array.


2 Answers

Follow the example of multiple fields

angular.module('app',['angular.filter'])
  .controller('MainController', function($scope) { 
    $scope.players = [
      {name: 'Gene', team: 'alpha', age: 19},
      {name: 'George', team: 'beta', age: 19},
      {name: 'Steve', team: 'gamma', age: 23},
      {name: 'Paula', team: 'beta', age: 23},
      {name: 'Scruath', team: 'gamma', age: 23}
    ];
 });
<!DOCTYPE html>
<html ng-app="app">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.22/angular.min.js"></script>
  <script src="//cdnjs.cloudflare.com/ajax/libs/angular-filter/0.4.7/angular-filter.js"></script>
  
<meta name="description" content="[groupBy example]"/>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  <div ng-controller="MainController"> 

<ul ng-repeat="(key, value) in players | groupBy: '[team,age]'">
  <b>Group name: {{key}}</b>
  <br>
  <li ng-repeat="player in value">
    <b>player:</b> {{ player.name }} 
    <br>
    <b>team:</b> {{player.team}} 
    <br>
    <span ng-if="player.age"><b>age:</b> {{ player.age }}</span>
  </li>
</ul>
  </div>
</body>
</html>
like image 186
Nath Paiva Avatar answered Sep 21 '22 12:09

Nath Paiva


try the following i am assuming you want groups to be created using multiple values as criteria

ng-repeat="(key, value) in players | groupBy: '[team,age]'"
like image 22
Alish Abdi Avatar answered Sep 17 '22 12:09

Alish Abdi