如何在JavaScript中按日期对数组进行排序?

17

我有一个问题,需要将数组对象中的数组按照日期排序。

我的数组对象如下所示。

[
  {
    "name": "February",
    "plantingDate": "2018-02-04T17:00:00.000Z",
  },
  {
    "name": "March",
    "plantingDate": "2018-03-04T17:00:00.000Z",
  },
  {
    "name": "January",
    "plantingDate": "2018-01-17T17:00:00.000Z",
  }
]

如何对以下数组对象中的数组按照月份从一月到十二月进行排序。

[
  {
    "name": "January",
    "plantingDate": "2018-01-17T17:00:00.000Z",
  },
  {
    "name": "February",
    "plantingDate": "2018-02-04T17:00:00.000Z",
  },
  {
    "name": "March",
    "plantingDate": "2018-03-04T17:00:00.000Z",
  }
]

我请求帮助。

先行致谢。


我认为它类似于这个:https://dev59.com/lGkw5IYBdhLWcg3wHW7n - Fendi jatmiko
https://dev59.com/lGkw5IYBdhLWcg3wHW7n - Ramesh
1个回答

31

将字符串解析为日期对象,然后通过比较函数进行排序

var a = [
  {
    "name": "February",
    "plantingDate": "2018-02-04T17:00:00.000Z",
  },
  {
    "name": "March",
    "plantingDate": "2018-03-04T17:00:00.000Z",
  },
  {
    "name": "January",
    "plantingDate": "2018-01-17T17:00:00.000Z",
  }
]

a.sort(function(a,b){
  return new Date(a.plantingDate) - new Date(b.plantingDate)
})

console.log(a)

正如Barmar所评论的那样,

a.sort(function(a,b){
  return a.plantingDate.localeCompare(b.plantingDate);
})

也将起作用。


比较函数应该返回一个数字,而不是布尔值。数字的符号用于确定排序顺序。 - Barmar
我已经尝试过了,但是月份已经排序了。先生,月份中的日期应该如何排序呢? - Titus Sutio Fanpula
1
localeCompare 更好。a.dateValue - b.dateValue 可能在 JS 中工作得很好。但是在 TypeScript 中不起作用 - 由于日期类型,它无法编译。TypeScript 期望包括枚举在内的数字值。 - Venkey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接