Open In App

How to sort an array of object by two fields in JavaScript ?

Last Updated : 13 Jul, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

We have given an array of objects and the task is to sort the array of elements by 2 fields of the object. There are two methods to solve this problem which are discussed below: 

Approach 1:

  • First compare the first property, if both are unequal then sort accordingly.
  • If they are equal then do the same for the second property.

Example: This example implements the above approach with a custom comparison function. 

Javascript




// Create an array of objects
let arr = [
    { first: 3, second: 4 },
    { first: 3, second: 1 },
    { first: 1, second: 10 }
];
 
// Apply array.sort with comparison function
arr.sort(function (a, b) {
    let af = a.first;
    let bf = b.first;
    let as = a.second;
    let bs = b.second;
 
    // If first value is same
    if (af == bf) {
        return (as < bs) ? -1 : (as > bs) ? 1 : 0;
    } else {
        return (af < bf) ? -1 : 1;
    }
});
 
// Display output
console.log("'" + JSON.stringify(arr[0])
    + ", " + JSON.stringify(arr[1]) + ", "
    + JSON.stringify(arr[2]) + "'");


Output

'{"first":1,"second":10}, {"first":3,"second":1}, {"first":3,"second":4}'

Approach 2:

  • First compare the first property, If both are unequal then sort accordingly.
  • If they are equal then do the same for the second property, this example is following the same approach but uses OR Gate to reduce the code.

Example: This example implements the above approach with a custom comparison function. 

Javascript




//  Create input array of objects
let arr = [
    { first: 3, second: 4 },
    { first: 3, second: 1 },
    { first: 1, second: 10 }
];
 
// Apply array.sort with custom comparision funtion
arr.sort(function (a, b) {
     
    // Compare first value then second
    return a.first - b.first || a.second - b.second;
});
 
// Display the output
console.log("'" + JSON.stringify(arr[0])
    + ", " + JSON.stringify(arr[1]) + ", "
    + JSON.stringify(arr[2]) + "'");


Output

'{"first":1,"second":10}, {"first":3,"second":1}, {"first":3,"second":4}'


Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads