DEV Community πŸ‘©β€πŸ’»πŸ‘¨β€πŸ’»

Cover image for How to sort an array of objects using the JS Sort Method
Abdulrasaq Jamiu Adewuyi
Abdulrasaq Jamiu Adewuyi

Posted on • Updated on

How to sort an array of objects using the JS Sort Method

The JavaScript Sort() method is a built-in function that we can easily use to sort an array of elements in JavaScript. However, the logic and method of applying the sort method differ depending on the data type of the elements in an array (string, number, object, etc.).
This article will teach you how to sort an array for strings, numbers, dates, and objects.

How Does the Sort() Method Work?

The sort() method is used to arrange or rearrange the positioning of an element in an array based on a condition.

The sort() method can arrange digits ranging from -1 to 9, A to Z, a to z, the question is how do we use the sort() method with digits outside this range, keep reading this will be explained in details.

NOTE: The sort() method give precedence from -1 to 9, A to Z, a to z. i.e in an array where we have a combination of numbers (-1 to 9), uppercase letter (A - Z), and lowercase letter (a - z), the sort() method will consider numbers followed by uppercase letter then the lowercase letter.

Why would I need the sort() method?

The sort method is widely used in many live scenarios.
Below are some of the scenarios where you can use the sort() method

  • Imagine an API that returns an array of articles and each article has a key showing number of views, where you need to display the 10 most viewed articles. (sorting by number)

  • Imagine an array of countries that you need to display in alphabetical order (sorting by string)

  • Imagine an array of items in a store that you need to display based on when it was added (sorting by date)

Let's get started properly.

How to Sort an Array of Strings in Ascending Order.

Fortunately, the sort() method, by default, will sort elements in alphabetical order from (a-z). As an outcome, the code below should arrange the string array in ascending order.

//array of strings
const list_of_animals = ["goat", "antelope", "horse", "fox", "cat"];

list_of_animal.sort()
//[ 'antelope', 'cat', 'fox', 'goat', 'horse' ]
Enter fullscreen mode Exit fullscreen mode

How to Sort an Array of Strings in Descending Order

To sort an array of strings in descending order, you must use the reverse() method with the sort() method.
The sort() method sorts the array in ascending order, whereas the reverse() method reverses the order of the array elements.

//array of strings
const list_of_animals = ["goat", "antelope", "horse", "fox", "cat"];

list_of_animals.sort().reverse()
//[ 'horse', 'goat', 'fox', 'cat', 'antelope' ]
Enter fullscreen mode Exit fullscreen mode

Note: The above method will work fine where all elements of the array are of the same case (uppercase or lowercase).

However, in the case where the elements in an array include both uppercase and lowercase, we will get an unexpected result.

const list_of_animals = ["goat", "antelope", "Horse", "fox", "Cat"];

list_of_animals.sort()
//[ 'Cat', 'Horse', 'antelope', 'fox', 'goat']
Enter fullscreen mode Exit fullscreen mode

Well, it is not an unexpected result, that is just how the sort() method works based on precedence, in cases like this all we need to do is convert every element to the same case before applying the sort method. The below code should work fine

const list_of_animals = ["goat", "antelope", "Horse", "fox", "Cat"];

list_of_animals.map((list)=>list.toLowerCase()).sort()
//[ 'antelope', 'cat', 'fox', 'goat', 'horse' ]
Enter fullscreen mode Exit fullscreen mode

Cool, let move to array of numbers

How to Sort an Array of Numbers

Sorting an array of numbers is not as straightforward as that of strings. As stated earlier, the sort method, by default, will sort an array of number ranging from -1 to 9. Therefore applying a sort() method to an array of numbers will give an unexpected response. For example

//array of numbers
const animal_count = [62, 42, 12, 3, 7];

animal_count.sort()
//[ 12, 3, 42, 62, 7 ]
Enter fullscreen mode Exit fullscreen mode

From the result, you will see that the array sorts based on the first character in each number which is not what we want.

Therefore, to be able to sort an array of numbers, we need an additional comparison function to support the sort() method.
The compare function will accept two arguments followed by a statement, for instance:

function(x, y) {return x - y}

//The result will be positive if x is greater
//The result will be negative if y is greater
//The result will be zero if x and y are equal
Enter fullscreen mode Exit fullscreen mode

Fortunately, the sort() method can appropriately sort positive, zero, and negative values.
So, as we use the sort() method in conjunction with the compare function, the sort() method compares two values, sends the values to our compare function, and then sorts the values based on the returned value.

How to Sort an Array of Numbers in Ascending Order.

Sorting an array of numbers in ascending order, i.e., from the least number to the highest number

animal_count?.sort((x, y) => x - y);
// 3, 7, 12, 42, 62 ]
Enter fullscreen mode Exit fullscreen mode

How to Sort an Array of Numbers in Descending Order

We are sorting an array of numbers in descending order, i.e., from the highest number to the least number.

animal_count?.sort((x, y) => y - x);
// [ 62, 42, 12, 7, 3 ]
Enter fullscreen mode Exit fullscreen mode

How to Sort an Array of Dates in Ascending Order

Sorting an array of dates in ascending order, i.e., from the least date to the highest date


const date_added = ["2022-07-15T17:10:57.720274+01:00", "2022-07-15T17:12:57.720274+01:00", "2022-07-14T17:10:00.720274+01:00", "2022-07-13T17:09:57.720274+01:00", "2022-07-15T17:10:50.720274+01:00"];

date_added?.sort((x, y) => new Date(x) - new Date(y));

/* [
 '2022-07-13T17:09:57.720274+01:00',
 '2022-07-14T17:10:00.720274+01:00',
 '2022-07-15T17:10:50.720274+01:00',
 '2022-07-15T17:10:57.720274+01:00',
 '2022-07-15T17:12:57.720274+01:00'
 ] */
Enter fullscreen mode Exit fullscreen mode

How to Sort an Array of Dates in Descending Order

Sorting an array of dates in ascending order, i.e., from the highest date to the last date:

const date_added = ["2022-07-15T17:10:57.720274+01:00", "2022-07-15T17:12:57.720274+01:00", "2022-07-14T17:10:00.720274+01:00", "2022-07-13T17:09:57.720274+01:00", "2022-07-15T17:10:50.720274+01:00"];

date_added?.sort((x, y) => new Date(y) - new Date(x));

/*[
 '2022-07-15T17:12:57.720274+01:00',
 '2022-07-15T17:10:57.720274+01:00',
 '2022-07-15T17:10:50.720274+01:00',
 '2022-07-14T17:10:00.720274+01:00',
 '2022-07-13T17:09:57.720274+01:00'
 ]*/
Enter fullscreen mode Exit fullscreen mode

How to Sort an Array of Objects by Any Key Value

Considering the below array of objects, we can sort by any of the keys (id, name, count, date_added) based on what you have learned in this article. However, I will show you how to sort by date_added and by name:

//array of object
const activity_history = [
    {
      id: "1",
      name: "goat",
      count: 62,
      date_added: "2022-07-15T17:10:57.720274+01:00"
    },
    {
      id: "2",
      name: "antelope",
      count: 42,
      date_added: "2022-07-15T17:12:57.720274+01:00"
    },
    {
      id: "3",
      name: "horse",
      count: 12,
      date_added: "2022-07-14T17:10:00.720274+01:00"
    },
    {
      id: "4",
      name: "fox",
      count: 3,
      date_added: "2022-07-13T17:09:57.720274+01:00"
    },
    {
      id: "5",
      name: "cat",
      count: 7,
      date_added: "2022-07-15T17:10:50.720274+01:00"
    }
  ];
Enter fullscreen mode Exit fullscreen mode

How to Sort an Array of Objects by Date in Ascending Order

activity_history?.sort(
    (x, y) => new Date(x.date_added) - new Date(y.date_added)
  );
Enter fullscreen mode Exit fullscreen mode

How to Sort an Array of Objects by Date in Descending Order

activity_history?.sort(
    (x, y) => new Date(y.date_added) - new Date(x.date_added)
  );
Enter fullscreen mode Exit fullscreen mode

How to Sort an Array of Objects by Name in Ascending Order

 activity_history.sort((x, y)=>{
    if(x.name < y.name) { return -1; }
    if(x.name > y.name) { return 1; }
    return 0;
  })
Enter fullscreen mode Exit fullscreen mode

How to Sort an Array of Objects by Name in Descending Order

 activity_history.sort((x, y)=>{
    if(y.name < x.name) { return -1; }
    if(y.name > x.name) { return 1; }
    return 0;
  })
Enter fullscreen mode Exit fullscreen mode

Conclusion

Ooh yeah, that is it. I hope you learned and understand how easy it is to use the sort() method for different data types through the many examples of how the methods work.
Thanks for Reading πŸŒŸπŸŽ‰

I'd love to connect with you on Twitter

Happy coding!

Top comments (3)

Collapse
lukeshiru profile image
Luke Shiru

If you'll use a single letter for the current and next items when sorting, I recommend using a and z instead of x and y, because it makes it way easier to read:

array.sort((a, z) => a - z); // Sort from A to Z
array.sort((a, z) => z - a); // Sort from Z to A
Enter fullscreen mode Exit fullscreen mode

Also, for strings, I recommend using localeCompare which is designed for sorting and works with all languages.

Cheers!

Collapse
joolsmcfly profile image
Julien Dephix • Edited on
list_of_animals.map((list)=>list.toLowerCase()).sort()
Enter fullscreen mode Exit fullscreen mode

map returns a copy of the original array so you need to assign the result back to list_of_animals.

list_of_animals = list_of_animals.map((list)=>list.toLowerCase()).sort()
Enter fullscreen mode Exit fullscreen mode

Or you could compare lowercase strings in the sort method.

Collapse
frankwisniewski profile image
Frank Wisniewski

you should at least do the following:

console.log(
["Paris", "KΓΆln", "Γ„hre","Buch","Ahr"].sort(Intl.Collator().compare)
)
Enter fullscreen mode Exit fullscreen mode

Find what you were looking for? Sign up so you can:

Β 
🌚 Enable dark mode
πŸ”  Change your default font
πŸ“š Adjust your experience level to see more relevant content