如何从小时数组中移除已存在于对象数组中的小时?
解决方法:过滤掉已占用的小时数
先聊聊你之前尝试里的问题:
- 第一种方法:
CurrentSchedule是数组,不能直接调用CurrentSchedule.hour——数组本身没有这个属性,得遍历里面的每个对象才能拿到对应的hour值。 - 第二种方法:
hoursToRemove是数组,你拿单个小时字符串和整个数组做相等判断,结果永远是false,应该用includes()来判断当前小时是否在要移除的列表里。 - 第三种方法:首先是拼写错误,
lenght应该是length;其次每次循环都基于原hours数组重新过滤,最后只会保留最后一次过滤的结果,之前过滤掉的小时会重新出现在数组里,逻辑不成立。
下面是两种正确的实现方式:
方式一:用Set存储已占用小时(效率更高)
// 提取所有已占用的小时,存入Set(判断存在性的效率比数组高) const occupiedHours = new Set(CurrentSchedule.map(item => item.hour)); // 过滤hours数组,保留不在已占用集合里的小时 const updatedHours = hours.filter(hour => !occupiedHours.has(hour)); console.log(updatedHours); // 输出:["09:00","10:00","11:00","13:00","14:00"]
方式二:用数组+includes()实现(更直观)
// 提取所有已占用的小时到数组 const hoursToRemove = CurrentSchedule.map(item => item.hour); // 过滤hours数组,排除已存在的小时 const updatedHours = hours.filter(hour => !hoursToRemove.includes(hour));
核心逻辑:
- 先用
map把CurrentSchedule里的所有hour值提取出来,得到已占用小时的集合/数组。 - 再用
filter遍历hours数组,只保留不在已占用列表里的元素。
内容的提问来源于stack exchange,提问作者user19730992
相关产品推荐
相关产品推荐

