JavaScript中访问嵌套字典结构实现按日期查询校园节假日功能
节假日匹配功能实现方案
原代码问题梳理
- 缺少
x(月份)、date(当前日期)、a(页面渲染元素)等核心变量的定义,逻辑不完整 - 内层循环首次判断失败就直接返回
NO FIND,无法遍历完当月所有节假日配置 - 直接用日期值和数组做相等判断,逻辑不成立,需要用数组的
includes()方法判断元素是否存在 - 节假日名称取值逻辑错误,遍历对象时的键本身就是节假日名称,无需额外提取key
完整可运行实现
const holidays = { January: { "Martin Luther King Jr. Day": [17] }, February: {}, March: { "Spring Break": [16] }, April: {}, May: {}, June: {}, July: { "Fourth of July": [4] }, August: {}, September: {}, October: {}, November: { "Thanksgiving": [25, 26] }, December: { "Christmas Eve": [23], "Christmas": [25], "Winter Break": [26, 27, 28, 29, 30, 31] } }; // 匹配当前日期对应的节假日 function getHoliday() { const now = new Date(); // 获取英文月份名,匹配holidays的key const currentMonth = now.toLocaleDateString('en-US', { month: 'long' }); const currentDay = now.getDate(); const monthConfig = holidays[currentMonth]; // 当月无节假日配置直接返回 if (!monthConfig) return "NO FIND"; // 遍历当月所有节假日匹配日期 for (const holidayName in monthConfig) { if (monthConfig[holidayName].includes(currentDay)) { return holidayName; } } return "NO FIND"; } // 渲染结果到页面,替换为你自己的页面元素ID const displayElement = document.getElementById('holiday-display'); displayElement.innerHTML = getHoliday();
自定义测试方法
如果需要测试指定日期的匹配效果,只需要修改日期生成逻辑即可,示例:
// 测试11月25日,注意JS月份从0开始计数,10对应11月 const now = new Date(2024, 10, 25);
内容的提问来源于stack exchange,提问作者grum
相关产品推荐
相关产品推荐

