When you want to sort javascript objects based on 2 properties, you can use the following code. In this example here we have an array of people (objects) here. I want to sort them by first name and then by their last names. So, what I do in my compare function to get the required output is to sort them by their last names, only when their first names are equal.
var people = [{
"fname": "shiva",
"lname": "kiran"
}, {
"fname": "aru",
"lname": "wind"
}, {
"fname": "shiva",
"lname": "charan"
}];
var compare = function(a, b) {
var ret = a.fname.localeCompare(b.fname)
if (ret === 0) {
return a.lname.localeCompare(b.lname);
}
return ret;
};
people.sort(compare);
console.log(people);Output
[{
"fname": "aru",
"lname": "wind"
}, {
"fname": "shiva",
"lname": "charan"
},
{
"fname": "shiva",
"lname": "kiran"
}]
If you would like to use integers then, this example with ages would help. Here the people are sorted by first names and then by their ages.
var people = [{
"fname": "shiva",
"lname": "kiran",
"age": 20
}, {
"fname": "aru",
"lname": "wind",
"age": 21
}, {
"fname": "shiva",
"lname": "charan",
"age": 19
}];
var compare = function(a, b) {
var ret = a.fname.localeCompare(b.fname)
if (ret === 0) {
return a.age - b.age;
}
return ret;
};
people.sort(compare);
console.log(people);Output
[{
"fname": "aru",
"lname": "wind"
"age": 21
}, {
"fname": "shiva",
"lname": "charan"
"age": 19
},
{
"fname": "shiva",
"lname": "kiran",
"age": 20
}]
If you would like to sort objects in descending order (strings or integers), then just return the negative of the result.
var people = [{
"fname": "shiva",
"lname": "kiran",
"age": 20
}, {
"fname": "aru",
"lname": "wind",
"age": 21
}, {
"fname": "shiva",
"lname": "charan",
"age": 19
}];
var compare = function(a, b) {
var ret = a.fname.localeCompare(b.fname)
if (ret === 0) {
return b.age - a.age;
}
return -1*ret;
};
people.sort(compare);
console.log(people);
Output
[{
"fname": "shiva",
"lname": "kiran",
"age": 20
},
{
"fname": "shiva",
"lname": "charan"
"age": 19
},
{
"fname": "aru",
"lname": "wind"
"age": 21
}]