Showing posts with label JSON. Show all posts
Showing posts with label JSON. Show all posts

Sorting an array of objects using Javascript

 When working on one of my projects, I had to sort the elements of the JSON array of objects. I did this most of the time from server side but this time I had to do the client side sort.

Here is the solution what I found.

We've two functions one to sort by ascending and other for descending. It expects first parameter as array (of objects) and second parameter the key on basis of which we want to sort.

 
<script>
function sortByKeyDesc(array, key) {
	return array.sort(function (a, b) {
    	var x = a[key]; var y = b[key];
        return ((x > y) ? -1 : ((x < y) ? 1 : 0));
	});
}

function sortByKeyAsc(array, key) {
	return array.sort(function (a, b) {
    	var x = a[key]; var y = b[key];
        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
	});
}
</script>
Here is the example

<script>
books = [{
  'BookID': 123,
  'BookName': 'Seven Habits of most effective people'
}, {
  'BookID': 234,
  'BookName': 'Why Leaders eat last'
}, {
  'BookID': 345,
  'BookName': 'How to influence people'
}, {
  'BookID': 456,
  'BookName': 'The Tipping point'
}];

sorted_books = sortByKeyAsc(books, 'BookName');
console.log(sorted_books);
</script>
Result will be

[{
  BookID: 345,
  BookName: "How to influence people"
}, {
  BookID: 123,
  BookName: "Seven Habits of most effective people"
}, {
  BookID: 456,
  BookName: "The Tipping point"
}, {
  BookID: 234,
  BookName: "Why Leaders eat last"
}]

JSON array of objects

It can be a situation where you got a array of data that should be sent in the JSON format to server via ajax, then you can do the following

<script type="text/javascript" >
groups = ['A', 'B', 'C'];
users  = ['user1', 'user2', 'user3'];

//required format is  [{"group_name" : "A", "leader" : "user1"}, {"group_name" : "B", "leader" : "user2"}, {"group_name" : "C", "leader" : "user3"}]

group_leaders = new Array();

len = groups.length;

for(var i = 0; i < len; i++ ){
    group_leaders.push({"group_name" : groups[i], "leader" : users[i]});
}

alert(JSON.stringify(group_leaders));
</script>

Here you can test here http://jsfiddle.net/sailesh/6wXdY/