如何编写判断某月是否存在13号星期五的JavaScript函数?
如何实现检测13号是否为星期五的函数
monthHasFriday13th 问题背景
我是编程新手,能处理CSS和HTML内容,但对JavaScript逻辑难以理解,这是我首个涉及布尔值(true/false)的编程任务,目前不知如何完成。任务要求:使用getFullMonth()获取日期列表,无需关注月份编号,检测列表中13号是否为星期五,根据结果返回true或false,函数命名为monthHasFriday13th。
我已编写好getNextWeekday和getFullMonth函数,但无法完成monthHasFriday13th函数,尝试参考getFullMonth却毫无头绪,现有错误尝试代码如下:
fundction monthHasFriday13th(day1weekday){let if ( getFullMonth (monthNum,day1Weekday) = (,13) ) if (getFullMonth (monthNum,day1Weekday) == 13 ){ nameFound = true; return () }}
我的完整现有JavaScript代码如下:
const weekdays = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]; const months = [ { name: "January", days: 31 }, { name: "February", days: 28 }, { name: "March", days: 31 }, { name: "April", days: 30 }, { name: "May", days: 31 }, { name: "June", days: 30 }, { name: "July", days: 31 }, { name: "August", days: 31 }, { name: "September", days: 30 }, { name: "October", days: 31 }, { name: "November", days: 30 }, { name: "December", days: 31 } ]; //Get Next Weekday! function getNextWeekday(day) { let i = 0; while (i < weekdays.length) { if (day === weekdays[i]) { if (i == weekdays.length - 1) { return weekdays[0]; } else { return weekdays[i + 1]; } } i = i + 1; } } console.log("The next weekday is " + weekdays + "!") //Get Full month! function getFullMonth(monthNum,day1Weekday) { if (monthNum < 1 || monthNum > 12) { return null; } if (weekdays.indexOf(day1Weekday) === -1 ) { return null; } let outcome = []; monthNum = monthNum - 1; let currentDay = day1Weekday; for (let i = 0 ; i < months[monthNum].days ; i = i + 1 ) { let nextDay = { dayNum: i + 1, dayName: currentDay }; outcome.push(nextDay); currentDay = getNextWeekday(currentDay); } return outcome; } //Get Fridays 13th! function monthHasFriday13th(????????){ ?????????????!??? }
解决方案
完整函数实现
function monthHasFriday13th(monthNum, day1Weekday) { // 调用getFullMonth获取目标月份的日期列表 const monthDays = getFullMonth(monthNum, day1Weekday); // 如果参数非法(比如月份不在1-12,或周几名称错误),直接返回false if (!monthDays) return false; // 遍历日期数组,找到13号的记录 for (let day of monthDays) { if (day.dayNum === 13) { // 直接返回13号是否为星期五的判断结果(布尔值) return day.dayName === "Friday"; } } // 兜底处理(实际所有月份都有13号,仅作防御性判断) return false; }
代码说明
- 参数匹配:函数接收
monthNum(1-12的月份编号)和day1Weekday(当月1号的星期名称),和getFullMonth的参数保持一致,才能正确调用获取日期列表。 - 非法参数处理:如果
getFullMonth返回null(参数不合法),直接返回false避免后续报错。 - 查找13号:用
for...of遍历日期数组,定位到dayNum为13的对象。 - 判断并返回结果:直接判断该对象的
dayName是否等于"Friday",这个判断本身就是布尔值,可直接返回。
你之前错误尝试的问题点
- 函数名拼写错误:
fundction应为function - 语法错误:
let if属于无效写法,不能在变量声明后直接跟条件判断 - 逻辑错误:直接将
getFullMonth返回的对象数组和数字13比较,完全不符合该函数的返回值类型
内容的提问来源于stack exchange,提问作者Merileopardi Saksassa
相关产品推荐
相关产品推荐

