微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

根据日期数组创建年和月的唯一对象

如何解决根据日期数组创建年和月的唯一对象

我正在尝试根据日期数组创建一个独特的年份和月份对象,请看下面的意思:

const availableDates = ["26-01-2022","30-01-2022","02-03-2022","16-04-2022","01-01-2023"]; // This list will be really long,just an example

我想使用 availableDates 创建一个像下面这样的独特对象,但在试图弄清楚时遇到问题:

const uniqueDates = {
  "2022": ["Jan","Mar","Apr"],"2023": ["Jan"]
};

如果您有更好的方法来实现这一目标,请告诉我!

提前致谢

解决方法

我们可以使用 Array.reduce 创建所需的地图,并使用 Set 来确保我们每年只保留一组唯一的月份。

const availableDates = ["26-01-2022","30-01-2022","02-03-2022","16-04-2022","01-01-2023","01-01-2023"];

const months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
const uniqueDates = availableDates.reduce((acc,dt) => { 
    let [day,month,year] = dt.split("-");
    acc[year] = [...new Set(acc[year] || []).add(months[month - 1])];
    return acc;
},{})


console.log("Unique object:",uniqueDates)

,

也许是这样的:

let month = {
  "01" : "Jan","02" : "Feb","03" : "Mar","04" : "Apr",// ...
};
let res = ["26-01-2022","01-01-2023"].reduce((acc,el) => {
   let arr = el.split("-");
   if( acc[arr[2]] && !acc[arr[2]].includes(month[arr[1]])){
      acc[arr[2]].push(month[arr[1]])
   } else if(!acc[el[2]]){
      acc[arr[2]] = [month[arr[1]]]
   }
   return acc;
},{})
console.log(res)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。