I am trying to sort the following object array in desc order.
const data = [
{
scheduledTime: '22:00',
arrivalTime: '22:12',
},
{
scheduledTime: '20:10',
arrivalTime: undefined,
},
{
scheduledTime: '08:55',
arrivalTime: '23:12',
},
{
scheduledTime: '08:55',
arrivalTime: undefined,
},
{
scheduledTime: '09:55',
arrivalTime: undefined,
},
];
The rules are, first sort by "arrivalTime" and then by "scheduledTime". All undefined values of "arrivalTime" must be at the end of the array. Once all the undefined values from "arrivalTime" are at the end of the array, then it must be sorted again by "scheduledTime" in desc.
Here is what I have currently:
const multiSort = data.sort(function(a, b) {
if (a.arrivalTime === undefined) return 1;
if (b.arrivalTime === undefined) return -1;
if (a.arrivalTime === b.arrivalTime) return 0;
if (a.arrivalTime > b.arrivalTime) return -1;
if (a.arrivalTime < b.arrivalTime) return 1;
return a.scheduledTime < b.scheduledTime ? 1 : -1;
});
What the output is:
0: {scheduledTime: "08:55", arrivalTime: "23:12"}
1: {scheduledTime: "22:00", arrivalTime: "22:12"}
2: {scheduledTime: "20:10", arrivalTime: undefined} //scheduledTime not in desc
3: {scheduledTime: "08:55", arrivalTime: undefined} //scheduledTime not in desc
4: {scheduledTime: "09:55", arrivalTime: undefined} //scheduledTime not in desc
Desire output:
0: {scheduledTime: "08:55", arrivalTime: "23:12"}
1: {scheduledTime: "22:00", arrivalTime: "22:12"}
2: {scheduledTime: "20:10", arrivalTime: undefined} //scheduledTime in desc
3: {scheduledTime: "09:55", arrivalTime: undefined} //scheduledTime in desc
4: {scheduledTime: "08:55", arrivalTime: undefined} //scheduledTime in desc
Thanks in advance :)