I have an array, productData
with multiple properties. This is how I currently sort the array by monthlyCost
, ascending.
How can I modify this to sort all items by a boolean property isPromoted
, followed by monthlyCost
?
My array should start with all items where isPromoted == true
sorted by monthlyCost
, then all items where isPromoted == false
sorted by monthlyCost
.
productData.sort((a, b) => { if (a.monthlyCost > b.monthlyCost) { return 1; } else if (a.monthlyCost < b.monthlyCost) { return -1; } else { return 0; } });
Advertisement
Answer
You can use this callback:
productData.sort((a, b) => +b.isPromoted - +a.isPromoted || a.monthlyCost - b.monthlyCost);
The unary plus is optional in plain JavaScript, but in a TypeScript context, you’ll need to be explicit about the conversion to number and apply +
.