基于年份和月份的 revere 数组对象

revere array object based on year and month

提问人:grabrep gg 提问时间:8/25/2023 最后编辑:grabrep gg 更新时间:8/25/2023 访问量:34

问:

我有下面的数组对象

var dataset = [
               {
                "data" : "Country",
                "title" : "country"
               },
               {
                "data" : "Jan 2023",
                "title" : "Jan 2023"
               },
               {
                "data" : "Feb 2023",
                "title" : "Feb 2023"
               },
               {
                "data" : "Dec 2022",
                "title" : "Dec 2022"
               },
               ]

我想要的是在 2022 年之前保持第一个指数不变,然后是 2023 年,如下所示

var dataset = [
               {
                "data" : "Country",
                "title" : "country"
               },
               {
                "data" : "Dec 2022",
                "title" : "Dec 2022"
               },
               {
                "data" : "Jan 2023",
                "title" : "Jan 2023"
               },
               {
                "data" : "Feb 2023",
                "title" : "Feb 2023"
               },

               ]

因此,例如,如果 2022 年 11 月是 11 月,那么 11 月应该是 2022 年 12 月。原始数组已经排序为最晚的年份,然后是去年。所以意味着原始数组总是有最新的年份月份在前。

我尝试数组排序,但无法存档

 var newdataset  = dataset.sort((a, b) => {
      if (a !== columns[0] && b !== columns[0]) { 
      return b.data.length - a.data.length
      }
  })
JavaScript jQuery 数组

评论

2赞 mykaf 8/25/2023
请分享您的数组排序尝试。它是如何达到你的期望的?您可能需要自定义排序功能,因为您对排序有特定要求。
0赞 mykaf 8/25/2023
你的剧本里有什么?columns
0赞 grabrep gg 8/25/2023
@mykaf我已经回答了我的问题,你可以在下面看到其他人的回答。所以请忽略谢谢。

答:

0赞 Oluwafemi Sule 8/25/2023 #1

比较从每个数据集数据构造的日期值。

let dataset = [{
    "data": "Country",
    "title": "country"
  },
  {
    "data": "Feb 2023",
    "title": "Feb 2023"
  },
  {
    "data": "Dec 2022",
    "title": "Dec 2022"
  },
  {
    "data": "Jan 2023",
    "title": "Jan 2023"
  },
  {
    "data": "Nov 2022",
    "title": "Nov 2022"
  },
]

const [heading, ...rest] = dataset;

dataset = [heading, ...rest.sort((a, b) => {
  return new Date(a.data) - new Date(b.data);
})];

console.log(dataset);

0赞 grabrep gg 8/25/2023 #2

我能够使用波纹管代码来做到这一点

 const sortByMonth = arr => {
      const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
      const getIndexOfMonth = month => months.indexOf(month)
      return [ ...arr ].sort((left, right) => {
        const [ leftMonth, leftYear ] = left.title.split(' ')
        const [ rightMonth, rightYear ] = right.title.split(' ')
        if (leftYear !== rightYear) {
          return parseInt(leftYear) - parseInt(rightYear)
        }
        return getIndexOfMonth(leftMonth) - getIndexOfMonth(rightMonth)
      })
    }

    console.log(sortByMonth(dataset))

评论

0赞 Community 8/28/2023
正如目前所写的那样,你的答案尚不清楚。请编辑以添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。您可以在帮助中心找到有关如何写出好答案的更多信息。
1赞 Rory McCrossan 8/25/2023 #3

若要按日期对值进行排序,应将它们转换为自定义逻辑中的对象。然后,您可以比当前通过字符串比较更准确地比较它们。Datesort()

下面是一个完整的工作示例:

const dataset = [{
  "data": "Country",
  "title": "country"
}, {
  "data": "Jan 2023",
  "title": "Jan 2023"
}, {
  "data": "Feb 2023",
  "title": "Feb 2023"
}, {
  "data": "Dec 2022",
  "title": "Dec 2022"
}]

const sortedDataset = dataset.sort((a, b) => new Date(a.data) - new Date(b.data));
console.log(sortedDataset);