【发布时间】:2020-11-15 07:18:50
【问题描述】:
我有一个包含值和方法的对象数组。其中一种方法返回我想要排序的数量。我还有一些布尔值,它们决定了另一个排序顺序,不管返回的数字是多少。
function reorder(){
var pinnedTasks = []
var regularTasks = []
var finishedTasks = []
for(var i of tasks){
if(i.pinned){
pinnedTasks.push(i)
} else if(i.done){
finishedTasks.push(i)
} else{
regularTasks.push(i)
}
}
}
这会将它们组织成类别,但不会重新排序。我想要一个数组,首先是pinnedTasks,其次是regularTasks,最后是finishedTasks,所有这些都由i.getDueDaysDiff()在自己的部分中重新排序。
具体来说,我希望它通过增加 i.getDueDaysDiff() 的值(最小优先)为正值排序,但减少为负值(最大优先)。例如 [10, -5, -90, 2] 排序应该是 [2, 10, -5, -90]。
例如,如果我有
tasks = [
task: regular, getDueDaysDiff() = 1
task: regular, getDueDaysDiff() = -2
task: regular, getDueDaysDiff() = 12
task: regular, getDueDaysDiff() = -50
task: pinned, getDueDaysDiff() = -10
task: pinned, getDueDaysDiff() = 2
task: finished, getDueDaysDiff() = 5
]
重新排序应该是
tasks = [
task: pinned, getDueDaysDiff() = 2
task: pinned, getDueDaysDiff() = -10
task: regular, getDueDaysDiff() = 1
task: regular, getDueDaysDiff() = 12
task: regular, getDueDaysDiff() = -2
task: regular, getDueDaysDiff() = -50
task: finished, getDueDaysDiff() = 5
]
我应该如何处理这个问题?
【问题讨论】:
-
您是否尝试过像这样简单地调用数组的
sort()方法?tasks.sort((task1, task2) => ... custom compare function...)? -
您想要的结果没有意义:到期日为 diff
12的常规任务排在到期日为 diff1的常规任务之后? -
@Terry 这是一个待办事项列表之类的事情,所以我首先想要即将发生的事情。 ` 我希望它通过增加 i.getDueDaysDiff() 的值(最小优先)为正值进行排序,但减少为负值(最大优先)。`
标签: javascript arrays sorting object