I was wondering if there was a better or smarter way of sorting objects in JavaScript when sorting for multiple items?
For example, if I have the following JSON:
json = [
{ "type": "car", "year": 2007, "origin": "AUS" },
{ "type": "truck", "year": 2021, "origin": "USA" },
{ "type": "car", "year": 2004, "origin": "CA" },
{ "type": "bike", "year": 2016, "origin": "UK" },
{ "type": "truck", "year": 2020, "origin": "CA" },
{ "type": "bike", "year": 2000, "origin": "AUS" }
]
If I wanted to sort it by type
then year
how would I do that in the same .sort
function?
I've currently got it doing one, then the other - but when I try to combine them it doesn't seem to output correctly:
// one after other
json.sort( ( a, b ) => {
a = a.type.toLowerCase();
b = b.type.toLowerCase();
return a < b ? -1 : a > b ? 1 : 0;
})
.sort( ( a, b ) => {
a = a.year;
b = b.year;
return a < b ? -1 : a > b ? 1 : 0;
});
Returning:
[
{ "type": "bike", "year": 2000, "origin": "AUS" },
{ "type": "car", "year": 2004, "origin": "CA" },
{ "type": "car", "year": 2007, "origin": "AUS" },
{ "type": "bike", "year": 2016, "origin": "UK" },
{ "type": "truck", "year": 2020, "origin": "USA" },
{ "type": "truck", "year": 2021, "origin": "CA" }
]
When it should return (all the types together, then by year):
[
{ "type": "bike", "year": 2000, "origin": "AUS" },
{ "type": "bike", "year": 2016, "origin": "UK" },
{ "type": "car", "year": 2004, "origin": "CA" },
{ "type": "car", "year": 2007, "origin": "AUS" },
{ "type": "truck", "year": 2020, "origin": "USA" },
{ "type": "truck", "year": 2021, "origin": "CA" }
]