Michael Michael - 7 months ago 15
Javascript Question

Sorting array of objects by property

I have this collection from DataBase:

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 }]


I need to sort this items by TypeId increasing.

Like that:

var itemsSorted = [{ 'Name':'Michael', 'TypeId':1 }
{ 'Name':'Max', 'TypeId':1 }
{ 'Name':'Andre', 'TypeId':1 }
{ 'Name':'Ptro', 'TypeId':1 }
{ 'Name':'Helga', 'TypeId':1 }
{ 'Name':'Georg', 'TypeId':2 }
{ 'Name':'Mitchell', 'TypeId':2 }
{ 'Name':'Marta', 'TypeId':2 }]
{ 'Name':'Seruin', 'TypeId':2 }
{ 'Name':'Greg', 'TypeId':3 }
{ 'Name':'Ann', 'TypeId':3 }


Is there any built in function in JavaScript that can sort array of objects by property?

Answer

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']"
Comments