I have this collection from DataBase:
var items = [{ \'Name\':\'Michael\', \'TypeId\':1 }
{ \'Name\':\'Max\', \'TypeId\':1 }
{ \'Name\':\'Andre\'
You can use js sort
function & ternary operator
var items = [{ 'Name':'Michael', 'TypeId':1 },
{ 'Name':'Max', 'TypeId':1 },
{ 'Name':'Andre', 'TypeId':1 },
{ 'Name':'Georg', 'TypeId':2 },
{ 'Name':'Greg', 'TypeId':3 },
{ 'Name':'Mitchell', 'TypeId':2 },
{ 'Name':'Ptro', 'TypeId':1 },
{ 'Name':'Helga', 'TypeId':1 },
{ 'Name':'Seruin', 'TypeId':2 },
{ 'Name':'Ann', 'TypeId':3 },
{ 'Name':'Marta', 'TypeId':2 }]
var sortedArray = items.sort(function(a,b){
return a.TypeId >b.TypeId?1:a.TypeId <b.TypeId?-1:0
})
console.log(sortedArray);
JSFIDDLE Example
You can use Array.prototype.sort:
var items = [{ 'Name':'Michael', 'TypeId':1 },
{ 'Name':'Max', 'TypeId':1 },
{ 'Name':'Andre', 'TypeId':1 },
{ 'Name':'Georg', 'TypeId':2 },
{ 'Name':'Greg', 'TypeId':3 },
{ 'Name':'Mitchell', 'TypeId':2 },
{ 'Name':'Ptro', 'TypeId':1 },
{ 'Name':'Helga', 'TypeId':1 },
{ 'Name':'Seruin', 'TypeId':2 },
{ 'Name':'Ann', 'TypeId':3 },
{ 'Name':'Marta', 'TypeId':2 }];
items.sort(function(a, b) { return a.TypeId - b.TypeId; })
console.table(items);
document.getElementById('demo').innerHTML = JSON.stringify(items, null, 4);
<pre id="demo"></pre>
You could use orderBy
filter.
var itemsSorted = $filter('orderBy')(items, 'TypeId')
On View
ng-repeat="item in items | orderBy: 'TypeId'"
By default filters are ascending(explicit would be +TypeId
), you could use -TypeId
to make it descending.
Additional Stuff
If you wanted to sort by multiple properties then do use array instead of string
like ['TypeId', 'Name']
ng-repeat="item in items | orderBy: ['TypeId', 'Name']"
There is big performance benefit you get when you do manual filtering inside controller. where as filtering on view is slower as it evaluates ng-repeat
express and bindings each time when digest cycle fire. Generally you won't see any performance hit in small collection, but in bigger collection you will see filtering on view will work slow.
In a template:
<li ng-repeat="item in items | orderBy:'TypeId'">...</li>
In a controller/service:
vm.sortedItems = $filter('orderBy')(items, 'TypeId');