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

如何从JavaScript对象数组中仅提取本周已有数据?

解决方案

要从当月数据数组中提取本周已存在的记录,核心是统一日期格式/范围,再通过匹配快速筛选。以下分两种情况处理(对应你注释中提到的date为毫秒数和示例中的字符串格式):


情况1:原数据的date是字符串格式(如02/01/2023)

步骤1:生成本周有效日期集合

先把本周的日期转换成和原数据一致的字符串格式,同时过滤掉还未到的日期:

// 格式化Date对象为MM/DD/YYYY字符串
function formatDateToMMDDYYYY(date) {
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  const year = date.getFullYear();
  return `${month}/${day}/${year}`;
}

// 获取本周周一到周日的日期字符串,过滤掉今天之后的日期
const getValidWeekDates = () => {
  const today = new Date();
  const todayStr = formatDateToMMDDYYYY(today);
  // 计算本周周一的日期
  const weekStart = new Date(today);
  weekStart.setDate(today.getDate() - (today.getDay() === 0 ? 6 : today.getDay() - 1));
  
  // 生成本周7天的日期字符串,只保留不晚于今天的
  return Array.from({length:7}, (_, i) => {
    const date = new Date(weekStart);
    date.setDate(weekStart.getDate() + i);
    return formatDateToMMDDYYYY(date);
  }).filter(dateStr => dateStr <= todayStr);
};

// 转成Set提升查找效率
const validWeekDates = new Set(getValidWeekDates());

步骤2:筛选原数据数组

遍历当月数据,只保留date在有效集合内的项:

// 假设monthlyData是你的当月数据数组
const weeklyExistingData = monthlyData.filter(item => {
  return item.date && validWeekDates.has(item.date);
});

情况2:原数据的date是毫秒时间戳(注释标注date is in ms)

这种情况直接通过时间戳范围筛选更高效:

步骤1:计算本周时间范围

获取本周周一0点的时间戳,以及今天23:59:59的时间戳:

// 获取本周周一00:00:00的时间戳
const getWeekStartTimestamp = () => {
  const today = new Date();
  const weekStart = new Date(today);
  weekStart.setDate(today.getDate() - (today.getDay() === 0 ? 6 : today.getDay() - 1));
  weekStart.setHours(0, 0, 0, 0);
  return weekStart.getTime();
};

// 获取今天23:59:59的时间戳
const getTodayEndTimestamp = () => {
  const today = new Date();
  today.setHours(23, 59, 59, 999);
  return today.getTime();
};

const weekStart = getWeekStartTimestamp();
const todayEnd = getTodayEndTimestamp();

步骤2:筛选原数据数组

直接过滤出时间戳在范围内的项:

const weeklyExistingData = monthlyData.filter(item => {
  return item.date && item.date >= weekStart && item.date <= todayEnd;
});

这样就能动态获取本周从周一到当前日期的已有数据,自动忽略数组中不存在的未来日期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:15:50