【问题标题】:how to sort array of object by date has specific format如何按日期对对象数组进行排序具有特定格式
【发布时间】:2021-12-11 20:30:10
【问题描述】:

我有一个包含日期格式的对象数组。代码仅适用于订购日期而不是月份和年份

我的代码

const bills = [
  {
    name: "ghaith",
    type: "transport",
    date: "12 may 21",
  }, 
  {
    name: "Alex",
    type: "Restaurants",
    date: "15 oct 20",
  }
];

bills.sort((a, b) => b.date < a.date ? 1 : -1)

【问题讨论】:

  • 这不是有效的 JavaScript。请更正,以便读者可以准确地看到您正在使用的内容。此外,很少有充分的理由以次优、语言和地理特定格式存储日期,例如“12 mai 21”。始终使用 ISO8601。
  • 这是无效的日期格式。
  • bills.sort((a, b) =&gt; new Date(a.date).getTime() - new Date(b.date).getTime()) ...原因仅适用于有效的日期速记格式... OP 例如最初确实提供了"12 mai 21",而它应该是"12 may 21" ...它已经修复/编辑了。
  • @GhaithDiab ...关于提供的解决方案,还有什么问题吗?

标签: javascript arrays date sorting parsing


【解决方案1】:

您可以使用以下代码按日期对对象数组进行排序,具有特定格式:

    const bills = [{
      name: "ghaith",
      type: "transport",
      date: "12 may 21",
    }, {
      name: "Alex",
      type: "Restaurants",
      date: "15 oct 20",
    }];


    console.log(
      bills.sort((a, b) => new Date(a.date) - new Date(b.date))
    );

【讨论】:

  • 欢迎来到 SO。并感谢您的工作解决方案(因此赞成)。还请允许我注意...没有必要将sort 的返回值额外分配给额外的变量。由于sort 确实改变了它正在操作的数组,所以sortedBills 等于(刚刚排序的)bills ...sortedBills === billstrue
  • @PeterSeliger 感谢您的支持,我已根据您的说明更新了我的答案。我认为现在还可以。
【解决方案2】:

从上面的评论...

"bills.sort((a, b) =&gt; new Date(a.date).getTime() - new Date(b.date).getTime()) ... 哪个原因仅适用于有效的日期速记格式 ... 例如,OP 最初确实提供了 "12 mai 21" 而它应该是 "12 may 21" ... 它已经修复/编辑了。”

const bills = [{
  name: "ghaith",
  type: "transport",
  date: "12 may 21",
}, {
  name: "Alex",
  type: "Restaurants",
  date: "15 oct 20",
}];

console.log(
  bills.sort((a, b) =>
    // new Date(a.date).getTime() - new Date(b.date).getTime()
    // or directly without `getTime` ...
    new Date(a.date) - new Date(b.date)
  )
);
.as-console-wrapper { min-height: 100%!important; top: 0; }

【讨论】:

    猜你喜欢
    • 2017-04-19
    • 2013-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多