How can I implement a
ORDER BY sort1 DESC, sort2 DESC logic in an JSON array like such:
var items = '[ { "sort1": 1, "sort2": 3, "name" : "a", }, { "sort1": 1, "sort2": 2, "name" : "b", }, { "sort1": 2, "sort2": 1, "name" : "c", } ]'; resulting in the new order :
b,a,c
You should design your sorting function accordingly:
items.sort(function(a, b) { return a.sort1 - b.sort1 || a.sort2 - b.sort2; }); (because || operator has lower precedence than - one, it's not necessary to use parenthesis here).
The logic is simple: if a.sort1 - b.sort1 expression evaluates to 0 (so these properties are equal), it will proceed with evaluating || expression - and return the result of a.sort2 - b.sort2.
As a sidenote, your items is actually a string literal, you have to JSON.parse to get an array:
const itemsStr = `[{ "sort1": 1, "sort2": 3, "name": "a" }, { "sort1": 1, "sort2": 2, "name": "b" }, { "sort1": 2, "sort2": 1, "name": "c" } ]`; const items = JSON.parse(itemsStr); items.sort((a, b) => a.sort1 - b.sort1 || a.sort2 - b.sort2); console.log(items); If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With