如何基于localStorage存储的复选框数组值输出Weekday或Weekend?
解决你的日期判断与localStorage问题
首先,咱们先排查存储方式的问题——这大概率是你遇到麻烦的根源之一。localStorage只能存储字符串类型的数据,如果你直接把数组存进去,它会自动调用toString()变成类似"Monday,Wednesday"的字符串,而不是真正的数组。这样后续读取的时候,你拿到的是字符串而非数组,自然没法用数组的方法去判断日期类型。
第一步:修正localStorage的存储与读取方式
存选中日期的时候,一定要用JSON.stringify()把数组转成字符串:
// 假设你获取到选中的日期数组是selectedDays localStorage.setItem('selectedDays', JSON.stringify(selectedDays));
读取的时候,用JSON.parse()把字符串转回数组,还要加个默认值避免null的情况:
const savedDays = JSON.parse(localStorage.getItem('selectedDays')) || [];
第二步:替换case语句为更适合的逻辑
case语句是严格匹配的,没法直接处理数组这种引用类型的数据(比如你不能用case ['Monday', 'Wednesday']来匹配数组,因为两个数组的引用地址不一样)。咱们换个更灵活的方式:
先定义周中和周末的日期集合,然后通过数组方法判断选中日期的类型:
// 定义周中和周末的日期列表 const weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']; const weekends = ['Saturday', 'Sunday']; const savedDays = JSON.parse(localStorage.getItem('selectedDays')) || []; // 判断所有选中日期是否都是周中 const isAllWeekday = savedDays.every(day => weekdays.includes(day)); // 判断所有选中日期是否都是周末 const isAllWeekend = savedDays.every(day => weekends.includes(day)); // 根据判断结果输出 if (isAllWeekday) { console.log('Weekday'); } else if (isAllWeekend) { console.log('Weekend'); } else { console.log('Mixed weekdays and weekends'); // 可选:处理混合选中的情况 }
如果你非要用case语句(虽然没必要,但满足你的需求),可以先把判断结果转换成一个标识字符串,再用case匹配:
let dayCategory = ''; if (isAllWeekday) { dayCategory = 'weekday'; } else if (isAllWeekend) { dayCategory = 'weekend'; } else { dayCategory = 'mixed'; } switch(dayCategory) { case 'weekday': console.log('Weekday'); break; case 'weekend': console.log('Weekend'); break; case 'mixed': console.log('Mixed weekdays and weekends'); break; }
总结一下
你的核心问题主要有两个:
- 存储方式错误:没有用JSON序列化数组,导致读取后的数据类型不对;
- case语句的误用:case无法直接匹配数组,需要先把数组转换成可匹配的简单类型。
按照上面的步骤调整后,应该就能正常根据选中日期输出对应的结果啦!
内容的提问来源于stack exchange,提问作者jsnoobie
相关产品推荐
相关产品推荐

