当某些日期为空时,如何按日期对数组进行排序



所以我试图按日期对对象数组进行排序,但我希望具有日期的对象优先于具有空日期的对象。

非排序数组示例:

[
{due_date: null},
{due_date: '03/11/2020'},
{due_date: '02/10/2020'}
]

我希望数组在排序后按此顺序排列

[
{due_date: '02/10/2020'},
{due_date: '03/11/2020'},
{due_date: null}
]

但是,当我通过脚本运行阵列时

var firstSort = 'due_date'
return array.sort((a, b) => {
return new Date(a[this.firstSort]) - new Date(b[this.firstSort])
})

我得到这个结果

[
{due_date: null},
{due_date: '02/10/2020'},
{due_date: '03/11/2020'}
]

排序时如何比较空日期或将其排除?

将字符串转换为日期并排序。对于null,请使用遥远未来的日期,这样它们将排序到最后。

let dates = [
{ due_date: null },
{ due_date: '03/11/2020' },
{ due_date: '02/10/2020' }
]
const distantFuture = new Date(8640000000000000)
const firstSort = 'due_date'
let sorted = dates.sort((a, b) => {
let dateA = a[firstSort] ? new Date(a[firstSort]) : distantFuture
let dateB = b[firstSort] ? new Date(b[firstSort]) : distantFuture
return dateA.getTime() - dateB.getTime()
})
console.log(sorted)

你所要做的就是,如果你的目标确实是排除,你首先过滤数组中的所有非空值,然后像这样排序:

var firstSort = 'due_date'
let dates = [
{ due_date: "01/10/2019" },
{ due_date: "10/11/2019" },
{ due_date: "05/09/2019" },
{ due_date: null },
{ due_date: "01/01/2020" },
{ due_date: null },
]
dates.filter(date => date[firstSort] !== null).sort((a, b) => new Date(a[firstSort]) - new Date(b[firstSort]))

这应该会奏效:(

最新更新