You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选出覆盖指定日期范围的Listings对象?

问题解决方案

问题根源

你的第二段filter逻辑犯了核心错误:用map方法返回布尔值数组,但filter需要的是单个布尔值来判断当前项是否保留。数组在布尔判断中永远为真,导致这一步过滤完全失效,所有价格符合条件的项都会被保留下来。

修正后的代码

// 提前预处理目标日期与价格,避免重复计算
const targetStart = new Date(range[0].startDate).setHours(0, 0, 0, 0);
const targetEnd = new Date(range[0].endDate).setHours(0, 0, 0, 0);
const minPriceNum = parseInt(minPrice);
const maxPriceNum = parseInt(maxPrice);

const filteredListings = listings.filter(listItem => {
  // 先做价格校验,不满足直接排除
  const priceNum = parseInt(listItem.price);
  if (!(priceNum >= minPriceNum && priceNum <= maxPriceNum)) {
    return false;
  }

  // 检查是否存在符合条件的availability
  return listItem.availability.some(avail => {
    const availStart = new Date(avail.startDate).setHours(0, 0, 0, 0);
    const availEnd = new Date(avail.endDate).setHours(0, 0, 0, 0);
    return availStart <= targetStart && availEnd >= targetEnd;
  });
});

关键优化点

  • 替换**map为some**:some会遍历数组,只要找到任意一个满足条件的元素就返回true,完美匹配你「存在满足条件的availability」的需求
  • 提前计算固定值:把目标日期、价格数值提前计算好,避免在循环中重复执行Date创建和字符串解析,提升性能
  • 合并两次filter:将价格校验与可用性校验合并到同一个filter中,减少数组遍历次数,代码更简洁高效

测试结果验证

用你提供的测试数据运行:

  • Place 1的所有availability都无法覆盖2022-12-01至2022-12-25的范围,会被过滤
  • Place 2的availability从2022-11-30到2022-12-30,完全覆盖目标日期范围,会被保留

最终filteredListings仅包含Place 2,完全符合预期。

内容的提问来源于stack exchange,提问作者sevonchan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:05:24