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

如何在JavaScript中高效从本月文件中过滤掉本周文件

优化后的filterThisMonth实现

要实现「本月中除本周外的文件」且保证最高效,核心思路是减少遍历次数、避免重复创建Date对象、提前计算固定边界值,直接看优化后的代码:

filterThisWeek(files) {
  const firstDayOfWeek = new Date(new Date().setDate(new Date().getDate() - new Date().getDay()));
  return this.filterToday(files).filter((f) => f.date >= firstDayOfWeek);
},
filterThisMonth(files) {
  const today = new Date();
  // 提前算出本月第一天和本周第一天(和filterThisWeek的逻辑保持一致)
  const firstDayOfMonth = new Date(today.getFullYear(), today.getMonth(), 1);
  const firstDayOfWeek = new Date(today.setDate(today.getDate() - today.getDay()));
  
  return files.filter((f) => {
    // 每个文件的日期只转一次Date,避免重复开销
    const fileDate = new Date(f.date);
    // 条件:属于本月,且日期在本周开始之前
    return fileDate >= firstDayOfMonth && fileDate < firstDayOfWeek;
  });
}

高效性说明

  • 单次数组遍历:不像先筛本月再筛掉本周那样做两次遍历,一次filter搞定所有判断,减少数组遍历开销
  • 固定值预计算:本月第一天、本周第一天这些全局边界值只计算一次,不会在循环内重复计算浪费性能
  • 减少Date实例创建:原代码中每个文件要创建两次Date对象做判断,现在只创建一次,节省内存和CPU资源

逻辑验证

你的filterThisWeek是筛选「本周(从周日到今日)的文件」,所以本月中排除这部分后,剩下的就是「本月开头到本周日之前」的文件,用fileDate >= firstDayOfMonth && fileDate < firstDayOfWeek完全匹配这个范围,逻辑准确。

内容的提问来源于stack exchange,提问作者the man in the pink suit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:00:51