如何通过prompt输入星期后提取Sunday并将其作为一周最后一天输出到控制台?
修正JavaScript代码:确保Sunday始终作为一周最后一天输出
需求说明
通过prompt输入一周中的某一天后,输出以输入日期为起始、Sunday固定为最后一天的日期序列到控制台。
原代码存在的问题
- 首次输入未转换为小写,若用户输入大写开头的日期(如
Monday)会直接触发无效输入提示 - 使用
splice()修改原始数组,导致后续数组操作的数据源被破坏,结果可能不符合预期 - 当输入
Sunday时,会丢失该日期,输出结果不包含Sunday,违反需求
修正后的代码
function days() { // 定义原始星期数组,确保Sunday在末尾 const daysOfWeek = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"]; // 首次输入就转换为小写,避免大小写匹配问题 let currentDay = prompt("Enter day of week:").toLowerCase(); let dayNum = daysOfWeek.indexOf(currentDay); // 循环校验输入,直到输入有效日期 while (dayNum < 0) { currentDay = prompt("Invalid day. Enter day of week:").toLowerCase(); dayNum = daysOfWeek.indexOf(currentDay); } // 使用slice()代替splice(),不修改原始数组 // 第一部分:从输入日期到数组末尾(包含Sunday) const fromCurrentToSunday = daysOfWeek.slice(dayNum); // 第二部分:从数组开头到输入日期的前一天(仅当输入日期不是Sunday时才需要) const beforeCurrentDay = dayNum !== 6 ? daysOfWeek.slice(0, dayNum) : []; // 合并两部分,确保Sunday始终在最后 const daysLeft = fromCurrentToSunday.concat(beforeCurrentDay); console.log(daysLeft); } days();
修正要点说明
- 输入处理优化:首次输入就调用
toLowerCase(),统一大小写,避免因输入格式导致的匹配失败 - 避免修改原数组:使用
slice()替代splice(),slice()仅返回指定范围的新数组,不会修改原始数组,保证后续操作的数据源完整 - 强制Sunday在末尾:拆分数组为「输入日到Sunday」和「输入日之前的日期」两部分,合并后Sunday自然处于结果数组的最后一位;当输入的是Sunday时,仅保留Sunday作为结果
- 边界处理:针对输入Sunday的情况单独处理,避免添加多余的前置日期
内容的提问来源于stack exchange,提问作者M.S
相关产品推荐
相关产品推荐

