我有一张待办事项清单,我需要按清单排序 dueDate
和按状态(未完成=>complete)。未完成的任务应在截止日期前按asc顺序排列。然后,完成的任务应该在未完成的任务之后,并且它们也应该按asc顺序排列 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"
},
]
以下是我使用2个排序函数的方法,首先按日期,然后按状态,但我觉得可以进一步减少:
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;
}
5条答案
按热度按时间e5nqia271#
试试这个:
ecr0jaav2#
您可以使用减法的强制属性和逻辑or运算符。
deyfvvtc3#
如果您要求使用组合排序功能。那么这个就可以了
首先,这将按到期日排序。如果到期日相等,则将考虑此类要素的状态。
zujrkrfu4#
更具描述性
xtfmy6hx5#
试试这个。