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

TJ *_*ems 1 javascript

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

非排序数组示例:

[
  {due_date: null},
  {due_date: '03/11/2020'},
  {due_date: '02/10/2020'}
]
Run Code Online (Sandbox Code Playgroud)

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

[
  {due_date: '02/10/2020'},
  {due_date: '03/11/2020'},
  {due_date: null}
]
Run Code Online (Sandbox Code Playgroud)

但是,当我通过脚本运行数组时

var firstSort = 'due_date'

return array.sort((a, b) => {
  return new Date(a[this.firstSort]) - new Date(b[this.firstSort])
})
Run Code Online (Sandbox Code Playgroud)

我得到这个结果

[
  {due_date: null},
  {due_date: '02/10/2020'},
  {due_date: '03/11/2020'}
]
Run Code Online (Sandbox Code Playgroud)

如何在排序时比较空日期或排除它?

dan*_*anh 5

将字符串转换为日期并排序。对于空值,请在遥远的将来使用日期,以便它们将排序到最后。

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)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!这就是我一直在寻找的。我的实际代码是对多个排序参数进行串接,因此我花了一秒钟将其修改为我需要的内容,但它有效。 (2认同)