【问题标题】:How to sort array by date In JavaScript? [duplicate]如何在 JavaScript 中按日期对数组进行排序? [复制]
【发布时间】:2018-09-12 03:26:27
【问题描述】:

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

我有一个如下的数组对象。

[
  {
    "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",
  }
]

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",
  }
]

我请求帮助。

提前谢谢你。

【问题讨论】:

标签: javascript


【解决方案1】:

解析字符串以获取 Date 对象,然后是 sort by compare function

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 commented

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

也可以。

【讨论】:

  • 无需转换为日期。 ISO 日期可以按字典顺序进行比较。
  • 感谢 Barmar,我已经编辑了答案
  • 比较函数应该返回一个数字,而不是布尔值。数字的符号用于确定排序。
  • 我试过了,但是月份是排序的。先生,如何对月份中的日期进行排序。
  • localeCompare 更好。 a.dateValue - b.dateValue 可能适用于 JS。它确实 not 与 TypeScript 一起工作 - 因为日期类型而不会编译。 TypeScript 需要包括枚举在内的数值。
猜你喜欢
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
  • 2023-03-04
  • 2012-01-18
相关资源
最近更新 更多