JavaScript使用filter()按当前时间筛选嵌套数组的日期时间记录
问题修复说明
核心错误点
- 比较逻辑语法错误:JavaScript 不支持
a <= b < c形式的连写判断,该写法会先计算前半段的布尔结果,再用布尔值和第三个值比较,完全不符合预期判断逻辑。 - 数据类型不匹配:
check_in、check_out字段是字符串格式,无法直接和 Date 类型的当前时间做大小比较,需要先转换为 Date 实例。 - 筛选结果未使用:调用 filter 得到符合条件的
FinalBooking后,渲染时仍遍历原始的booking_status数组,筛选逻辑没有实际生效。 - 缺少空值处理:没有判断筛选结果为空的场景,无法输出要求的「NOTHING」提示。
- HTML 语法错误:拼接行代码时写了多余的尖括号
<tr>><td>,会导致表格结构渲染异常。
修正后代码
<script> $(document).ready(function () { $.ajax({ url: 'http://localhost:8000/', dataType: 'JSON', success: function (data) { var content = '' // 提到循环外避免重复创建实例,同一批数据的判断时间统一即可 const currentDatetime = new Date(); data.forEach(item => { const booking = item.booking_status; // 修正筛选逻辑:转时间格式 + 拆分判断条件 const FinalBooking = booking.filter(obj => { const checkInTime = new Date(obj.check_in); const checkOutTime = new Date(obj.check_out); return currentDatetime >= checkInTime && currentDatetime < checkOutTime; }) // 按要求处理空结果 const statusText = FinalBooking.length ? FinalBooking.map(s => s.status).join('<br/>') : 'NOTHING'; // 修正多余的尖括号 content += "<tr><td>" + item.item_name + "</td><td>" + item.author+ "</td><td>" + statusText + "</td></tr>" }) $('#table_body').html(content); } }) }); </script>
内容的提问来源于stack exchange,提问作者lee thunder
相关产品推荐
相关产品推荐

