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

JavaScript如何按日期合并两个对象数组生成结构化日程列表

实现方案

逻辑很简单,全程按你的匹配规则走就行:

  • 以dates数组为遍历基准,保证最终输出的日程顺序和原日期顺序完全一致,不会遗漏任何日期
  • 处理每个日期时,从训练计划数组里找出所有scheduledAt和当前日期完全相等的条目
  • 把日期和匹配到的训练条目组装成对象存入结果,没匹配到训练时训练列表自然是空数组,刚好符合你的要求

最直白的实现代码如下,小数据量直接用就行:

const schedule = dates.map(currentDate => {
  const matchedWorkouts = workouts.filter(item => item.scheduledAt === currentDate)
  return {
    date: currentDate,
    workouts: matchedWorkouts
  }
})

注意:你给的预期输出示例里,把原始数据中scheduledAt为2022-04-14T00:00:00.000Z的「Squat Clean 6 sets」放到了4月15的分组下,和原始数据字段值不匹配。上面的代码是严格按字段值相等做匹配,如果是你写示例时的笔误,直接用代码即可;如果确实需要做日期偏移之类的特殊逻辑,修改filter里的日期判断规则就行。

如果你的训练计划数据量很大,可以先做一次分组缓存,避免每次筛选都遍历整个训练数组,性能更好:

// 先把训练按日期分组存成哈希表
const workoutGroup = workouts.reduce((group, item) => {
  const key = item.scheduledAt
  if (!group[key]) group[key] = []
  group[key].push(item)
  return group
}, {})

// 遍历日期时直接从哈希表取对应训练,不用重复遍历
const schedule = dates.map(currentDate => ({
  date: currentDate,
  workouts: workoutGroup[currentDate] || []
}))

两种写法最终输出的结构完全一致,单日期对应0个、1个、多个训练的场景都能正常处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:01:04