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