JavaScript - Sort Arrays Without Mutations with toSorted()
Often, you'll need to sort your data in arrays.
One frustrating thing about the sort()
method is that it mutates the array you call it on.
Thankfully, the new toSorted()
method provides a very simple fix.
It works the same way as sort, except it returns a new value.
If you aren't sure what I mean, let me show you why sort()
is bad:
Why the old sort method is bad 🚫
As a quick example of some potentially poor behavior, let me show you how Array.sort()
mutates values:
const numbers = [10, 5, 40, 25]; const sorted = numbers.sort((a, b) => a - b);
When we run this code, sorted
equals [5, 10, 25, 40]
, which I assume you expected.
But the problem now is that numbers
also equals [5, 10, 25, 40]
, so we no longer have a reference to the original value if we need it.
How to use toSorted()
You can now call toSorted()
on your arrays, which will return a new sorted array as a value:
const numbers = [10, 5, 40, 25]; const sorted = numbers.toSorted((a, b) => a - b); // `sorted` equals [5, 10, 25, 40] // `numbers` remains [10, 5, 40, 25] 🎉
Now, by changing the function to toSorted()
we get a much more predictable behaviour since our values are not being mutated. 🎉
Just 2 characters are required to upgrade your logic so I think it's a no brainer replacement for sort()
.
Happy coding! ✌️