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

Tit*_*ula 9 javascript

我在按日期对数组对象中的数组进行排序时遇到问题。

我有一个数组对象,如下所示。

[
  {
    "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",
  }
]
Run Code Online (Sandbox Code Playgroud)

如何对1月到12月数组对象中的数组进行排序,如下。

[
  {
    "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",
  }
]
Run Code Online (Sandbox Code Playgroud)

我求救。

先感谢您。

mar*_*dze 18

解析字符串以获取 Date 对象,然后按 compare 函数排序

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

正如巴马尔评论的那样

a.sort(function(a,b){
  return a.plantingDate.localeCompare(b.plantingDate);
})
Run Code Online (Sandbox Code Playgroud)

也会起作用。

  • 无需转换为日期。ISO 日期可以按字典顺序进行比较。 (8认同)
  • *localeCompare* 更好。a.dateValue - b.dateValue 可能适用于 JS。它*不能*与 TypeScript 一起使用 - 由于日期类型而无法编译。TypeScript 需要包括枚举在内的数值。 (2认同)