用Javascript计算假期

用Javascript计算假期,javascript,arrays,Javascript,Arrays,作为一个学习练习,我在这里提出了一个问题:,并根据建议的方法,自行开发了一个使用ES6阵列方法的解决方案 上面链接的上一篇堆栈帖子建议使用对象方法,但答案中没有任何代码。我决定使用数组方法,并提供一个完整的编码示例。有8K视图的旧帖子没有提供数组方法,OP已经有了答案,所以我创建了一个新问题并自我回答 我还在学习,所以我邀请专业人士对此进行改进!我运行了一些性能测试,if/then方法更快,但这段代码可以工作。正如您所见,我无法链接.findIndex(),但这只会导致另一个变量和另一行代码。需

作为一个学习练习,我在这里提出了一个问题:,并根据建议的方法,自行开发了一个使用ES6阵列方法的解决方案

上面链接的上一篇堆栈帖子建议使用对象方法,但答案中没有任何代码。我决定使用数组方法,并提供一个完整的编码示例。有8K视图的旧帖子没有提供数组方法,OP已经有了答案,所以我创建了一个新问题并自我回答

我还在学习,所以我邀请专业人士对此进行改进!我运行了一些性能测试,if/then方法更快,但这段代码可以工作。正如您所见,我无法链接.findIndex(),但这只会导致另一个变量和另一行代码。需要注意的是,一些ES6数组方法在旧浏览器中不受支持

无论如何,我希望这能有所帮助。

功能检查\u假期4(ds){
常数[m,d,y]=ds.split('/');
const h=[//键的格式为月、周、日
[“0,1”,“元旦”],
[“0,3,1”,“小马丁·路德·金日”],
[“0,20”,(函数(){
如果((y-1937)%4)==0)返回“就职日”
})()],
[“1,14”,“情人节”],
[“1,3,1”,“总统节”],
[“2,2,0”,“夏令时开始”],
[“3,3,3”,“行政专业人员日”],
[“4,2,0”,“母亲节”],
[“4,5,1”,“阵亡将士纪念日”],
[“5,14”,“卖旗日”],
[“5,3,0”,“父亲节”],
[“5,3,6”,“武装部队日”],
[“6,4”,“独立日”],
[“6,4,0”,“家长节”],
[“8,1,1”,“劳动节”],
[“9,2,1”,“哥伦布日”],
[“9,31”,“万圣节”],
[“10,11”,“退伍军人日”],
[“10,1,0”,“夏令时结束”],
[“10,1,2”,“选举日”],
[“10,4,4”,“感恩节”],
[“11,25”,“圣诞节”]
];
常量f=(a,n,d)=>(d+6-新日期(…a,7).getDay())%7+n*7-6;
常量dim=(y,m)=>新日期(y,m+1,0).getDate();
常量hc=(y,m)=>h.filter(v=>v[0]。startsWith(m)).map((val,i)=>{
常量[vm,vn,vdw]=val[0]。拆分(',');
设cd=f([y,vm],vn,+vdw);
cd=(cd>dim(y,vm))?cd-7:(val[0]。拆分(',')。长度==2)?vn:cd;
val[0]=(+vm+1)+“/”+cd+“/”+y;
返回[val[0],val[1]];
});
常数ha=hc(y,m-1);
返回ha[ha.findIndex(sa=>sa[0]==ds)][1];
}
console.log(检查holiday4(新日期(“2019年10月31日”).toLocaleDateString());
//“万圣节”
日志(检查holiday4(新日期(“2021年5月31日”).toLocaleDateString());

//“阵亡将士纪念日”
hi@rew查看代码审查stackexchange,我认为这与此更相关,因为您没有遇到具体问题。欢迎您提出hi@rew自答问题,但问题不应重复,并且应遵循默认问题模板。这个问题没有答案,上一篇文章没有完整的编码答案,只是一个建议的方法。这不是重复。代码是原创的。这是自我回答,这是允许的。只是想帮助别人。之前的帖子已经有了一个不完整的答案。这很好。非常感谢。我已经开发了一个替代的较短的方法,我将很快与大家分享。选举日信息不正确。