I have a to do list that I need to sort by dueDate and by status (incomplete => complete). The incomplete tasks should be in ASC order by dueDate. Then the completed tasks should come after incomplete tasks and they should also be in ASC order by dueDate.
unsorted array
[{"task":"Dishes", "isComplete":false, "dueDate":"2021-01-01T15:45:00.000Z"},{"task":"feed baby", "isComplete":true, "dueDate":"2021-01-02T15:45:00.000Z"},{"task":"Laundry", "isComplete":true, "dueDate":"2021-01-04T15:45:00.000Z"},{"task":"Homework", "isComplete":false, "dueDate":"2021-01-03T15:45:00.000Z"}]
sorted array
[
{
"task":"Dishes",
"isComplete":false,
"dueDate":"2021-01-01T15:45:00.000Z"
},
{
"task":"Homework",
"isComplete":false,
"dueDate":"2021-01-03T15:45:00.000Z"
}
{
"task":"feed baby",
"isComplete":true,
"dueDate":"2021-01-02T15:45:00.000Z"
},
{
"task":"Laundry",
"isComplete":true,
"dueDate":"2021-01-04T15:45:00.000Z"
},
]
Here is my approach using 2 sort functions, first by date then by status but I feel it can be reduced further:
const sortByDate = (a,b) => {
if (new Date(a.dueDate) < new Date(b.dueDate)){
return -1;
}
if (new Date(a.dueDate) > new Date(b.dueDate)) {
return 1;
}
return 0;
}
const sortByStatus = (a,b) => {
if (a.isComplete < b.isComplete){
return -1;
}
if (a.isComplete > b.isComplete) {
return 1;
}
return 0;
}