Introduction
Vanilla JavaScript comes handy with a lot of in build
features that deal with data structures. But some of them are very complex and
we don’t get expected results without doing the workarounds. By the way, I got stuck
with sorting an array object with multiple fields. After a lot of research, I
got the expected result. In this article, I penned down my research work and if
you read this entire article you will get to know how to multi sort in array
objects using vanilla JavaScript.
Example use case
Let us consider the example of an employee array object for
which you should do the multi sort based on address field first and then
name field
Expected Output
Problem Statement
The array will not have any inbuilt functionality to sort
multiple criteria by default. Let us see the output of Array.sort() method
I believe the above-mentioned sort function will greatly
work with a one-dimensional integer and string array. But think about complex
object array like above, the default sort function will not work for your
customized sorting needs.
Approach
We can add customized topping function to Array.sort()
method like Array.sort(multiSortCompareFn) where multiSortCompareFn
is a call back function which does the stuff for us to do customized
multi sorting for an array
Compare Function
Before customized multiSortCompareFn we need to know what does normal
Compare function will do for us
Normally it would take two elements a and b as input. If a
is greater than b then it will swap a and b
and if a is lesser than b then it will swap b and a. Likewise, the compare
function will do several passes until the end of the array to perform sorting.
Then the output will be
How can we apply customized sort function to perform multi sorting?
According to our sample requirement, we need to do multi sort
based on the address and then name where it takes employees as a complex object.
The idea here is that if the first
address and second address element are equal then we will do sorting on first
name and second name element
1.
If the first name element is element is lesser
than the second name element then swap second and first name element
2.
If the first name element is greater than the
second name element then swap first name and second name element
3.
No swap if both name elements are equal
If the first address element and second address element is
not equal then it will do the following
1.
If the first address element is lesser than the
second address element then swap second and first address elements
2.
If the first address element is greater than the
second address element then swap first address element and second address
element
This pass will go until the end of the array of the
employee's complex object then the
output will be
This is what we expect in the requirement
Conclusion
I Believe that this article will help to the fellow
developers like me who are trying to resolve the same kind of issue. Feel free
to post your comments which will be helpful for me to improvise myself.
Comments
Post a Comment