【问题标题】:How do I sort dates in JSON in the format MMM DD, YYYY? [duplicate]如何以 MMM DD、YYYY 格式对 JSON 中的日期进行排序? [复制]
【发布时间】:2026-02-07 14:00:01
【问题描述】:

我有一个 JSON 文件,其中包含以下数据:

{
  "Aug 24, 2020": [
    "weather alert.",
    "new message",
    "you have a new request.",

  ],
  "Aug 23, 2020": [
    "weather alert.",
    "new message",
    "you have a new request.",
  ],
  "Aug 22, 2020": [
    "weather alert.",
    "new message",
    "you have a new request.",
  ]
}

我想在我的代码中使用 JSON 数据之前对键(日期)进行排序。是否可以在 Javascript 中以这种格式对日期进行排序?

【问题讨论】:

  • 不要期望对对象的属性进行排序。尽管它们的排序方式背后有一些逻辑,但当顺序很重要时,对我们来说最佳实践是 array,而不是普通对象。
  • 您真的在这里使用 JSON,还是这是一个 JavaScript 对象(不需要 JSON 解析)?
  • 因为 ES6 的密钥保证是按插入顺序排列的。在 ES5 中,标准不保证它们是有序的。

标签: javascript sorting


【解决方案1】:

您可以将属性按key 排序为Date 对象:

let dates = {
  "Aug 24, 2020": [
    "weather alert.",
    "new message",
    "you have a new request.",

  ],
  "Aug 23, 2020": [
    "weather alert.",
    "new message",
    "you have a new request.",
  ],
  "Aug 22, 2020": [
    "weather alert.",
    "new message",
    "you have a new request.",
  ]
}
dates = Object.keys(dates)
          .sort((a,b) => new Date(a) - new Date(b))
          .reduce(function (result, key) {
               result[key] = dates[key];
               return result;
          }, {});

console.log(dates);

【讨论】:

    【解决方案2】:

    const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    
    const parseDate = str => new Date(
      parseInt(str.substr(8, 4)),
      months.indexOf(str.substr(0, 3)),
      parseInt(str.substr(4, 2))
    );
    
    const values = {
      "Aug 24, 2020": [
        "weather alert.",
        "new message",
        "you have a new request.",
    
      ],
      "Aug 23, 2020": [
        "weather alert.",
        "new message",
        "you have a new request.",
      ],
      "Aug 22, 2020": [
        "weather alert.",
        "new message",
        "you have a new request.",
      ]
    };
    
    const sortKeysByDate = obj => Object.keys(obj)
      .sort((a, b) => parseDate(a).getDate() - parseDate(b).getDate())
      .reduce((result, key) => {
        result[key] = obj[key];
        return result;
      }, {});
    
    console.log(sortKeysByDate(values));

    【讨论】: