This naively assumes that all elements have a valid color (or at least it sorts elements with an invalid color first):
arr.sort( ( a, b ) => {
const colorOrder = ['yellow', 'blue', 'white', 'green', 'red'];
const aColorIndex = colorOrder.indexOf( a.color );
const bColorIndex = colorOrder.indexOf( b.color );
if ( aColorIndex === bColorIndex )
return a.card - b.card;
return aColorIndex - bColorIndex;
} );
Example:
const sorted = [
{ color: 'yellow', card: '3' },
{ color: 'red', card: '4' },
{ color: 'blue', card: '6' },
{ color: 'white', card: '2' },
{ color: 'blue', card: '2' },
{ color: 'yellow', card: '2' },
{ color: 'blue', card: '0' },
{ color: 'green', card: '7' },
].sort( ( a, b ) => {
const colorOrder = ['yellow', 'blue', 'white', 'green', 'red'];
const aColorIndex = colorOrder.indexOf( a.color );
const bColorIndex = colorOrder.indexOf( b.color );
if ( aColorIndex === bColorIndex )
return a.card - b.card;
return aColorIndex - bColorIndex;
} );
// Result:
[
{ "color": "yellow", "card": "2" },
{ "color": "yellow", "card": "3" },
{ "color": "blue", "card": "0" },
{ "color": "blue", "card": "2" },
{ "color": "blue", "card": "6" },
{ "color": "white", "card": "2" },
{ "color": "green", "card": "7" },
{ "color": "red", "card": "4" }
]
Array.prototype.sort
and implement your custom comparison logics - just 4 or 5 lines of code. – Yeldar Kurmangaliyev Aug 16 at 4:10