I have an array of Objects that contains the fYear
and FQtr
keys. My goal is to sort by FQtr
keys and fYear
. Would you please help?
Original Data
const data = [
{ "fYear": "FY22 Q3", "FQtr": "W10"},
{ "fYear": "FY22 Q3", "FQtr": "W11"},
{ "fYear": "FY22 Q3", "FQtr": "W12"},
{ "fYear": "FY22 Q3", "FQtr": "W13"},
{ "fYear": "FY22 Q3", "FQtr": "W2"},
{ "fYear": "FY22 Q4", "FQtr": "W1"},
{ "fYear": "FY22 Q3", "FQtr": "W3"},
{ "fYear": "FY22 Q3", "FQtr": "W4"},
{ "fYear": "FY22 Q4", "FQtr": "W2"},
{ "fYear": "FY22 Q3", "FQtr": "W5"},
{ "fYear": "FY22 Q3", "FQtr": "W6"},
{ "fYear": "FY22 Q3", "FQtr": "W7"},
{ "fYear": "FY22 Q3", "FQtr": "W8"},
{ "fYear": "FY22 Q3", "FQtr": "W9"},
{ "fYear": "FY22 Q4", "FQtr": "W4"},
{ "fYear": "QTD", "FQtr": "QTD"},
{ "fYear": "FY22 Q4", "FQtr": "W3"}
]
Expected Sorted Data
const data = [
{ "fYear": "FY22 Q3", "FQtr": "W2"},
{ "fYear": "FY22 Q3", "FQtr": "W3"},
{ "fYear": "FY22 Q3", "FQtr": "W4"},
{ "fYear": "FY22 Q3", "FQtr": "W5"},
{ "fYear": "FY22 Q3", "FQtr": "W6"},
{ "fYear": "FY22 Q3", "FQtr": "W7"},
{ "fYear": "FY22 Q3", "FQtr": "W8"},
{ "fYear": "FY22 Q3", "FQtr": "W9"},
{ "fYear": "FY22 Q3", "FQtr": "W10"},
{ "fYear": "FY22 Q3", "FQtr": "W11"},
{ "fYear": "FY22 Q3", "FQtr": "W12"},
{ "fYear": "FY22 Q3", "FQtr": "W13"},
{ "fYear": "FY22 Q4", "FQtr": "W1"},
{ "fYear": "FY22 Q4", "FQtr": "W2"},
{ "fYear": "FY22 Q4", "FQtr": "W3"},
{ "fYear": "FY22 Q4", "FQtr": "W4"},
{ "fYear": "QTD", "FQtr": "QTD"}
]
My Approach
function sortFQtr( a, b ) {
const [prevVal, nextVal] = [Number.parseInt(a.FQtr.substring(1)), Number.parseInt(b.FQtr.substring(1))];
if ( prevVal < nextVal ) return -1;
if ( prevVal > nextVal) return 1;
return 0;
}
// ["FY22 Q4", "FY22 Q3", "QTD"]
var fYears = data.map(value => value.fYear).filter( (value, index, _arr) => _arr.indexOf(value) == index);