【问题标题】:Map and sort data by date [duplicate]按日期映射和排序数据[重复]
【发布时间】:2022-02-23 06:49:01
【问题描述】:

我检索了一个对象数组,我需要对其进行格式化以使其能够被 Google Charts 接受。初始数据是这样的

[
   {
      "itemOne":111,
      "itemTwo":1,
      "itemThree":"2022-02-01T00:00:00.000Z"
   },
   {
      "itemOne":222,
      "itemTwo":2,
      "itemThree":"2022-01-01T00:00:00.000Z"
   },
   {
      "itemOne":333,
      "itemTwo":3,
      "itemThree":"2021-12-01T00:00:00.000Z"
   },
]

要开始格式化,我执行以下操作

const chartData = data.lastYear.map(
    (item) => ([item.itemThree, item.itemTwo, item.itemOne]),
);

现在我只剩下这个了。

[
    ["2022-02-01T00:00:00.000Z", 1, 111],
    ["2022-01-01T00:00:00.000Z", 2, 222],
    ["2021-12-01T00:00:00.000Z", 3, 333],
]

我一直在尝试按日期对上述内容进行排序。我目前的尝试很糟糕,显然行不通。

 const chartData = data.lastYear.map(
    (item) => ([item.itemThree, item.itemTwo, item.itemOne]),
  ).sort((a, b) => {
    return new Date(b.date) - new Date(a.date);
  });
  

那么按日期对所有内容进行排序的最佳方法是什么?

谢谢

【问题讨论】:

  • 究竟是什么不起作用?
  • 对不起,我很傻,不同的是,并非所有日期都是 2022 年!
  • 要对映射数组进行排序,data.sort((a, b) => a[0] - b[0] 就足够了。

标签: javascript date sorting


【解决方案1】:
let data = [
   {
      "itemOne":111,
      "itemTwo":1,
      "itemThree":"2022-02-01T00:00:00.000Z"
   },
   {
      "itemOne":222,
      "itemTwo":2,
      "itemThree":"2022-01-01T00:00:00.000Z"
   },
   {
      "itemOne":333,
      "itemTwo":3,
      "itemThree":"2021-12-01T00:00:00.000Z"
   },
]
data.sort((a,b)=>{
    return new Date(b.itemThree) - new Date(a.itemThree);
})

这会根据日期对数据数组进行排序。 希望对您有所帮助

【讨论】:

  • 排序函数体可以简单地为(a, b)=> a.itemThree - b.itemThree,无论要排序的值是字符串还是日期对象,因为字符串符合 ISO 8601。这也会对原始数据进行排序,而不是对 map 生成的数组进行排序。按日期排序之前已经介绍过很多次了。
猜你喜欢
  • 1970-01-01
  • 2014-09-08
  • 2019-05-01
  • 2021-03-11
  • 2017-05-21
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多