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

如何从对象数组中提取时间范围KEYS?代码修改求助

提取时间范围键的代码修复

需求与问题

需要从对象数组tempRemovedTimeRanges中提取所有时间范围的KEYS(而非时间戳值),现有代码输出空数组,请求修改。

数据结构说明

  • tempRemovedTimeRanges是包含日期对象的数组,每个日期对象(如Wednesdays)对应一个包含时间范围对象的数组
  • 时间范围对象的键格式为T_xx:xx_Start或T_xx:xx_End

现有代码

console.log(tempRemovedTimeRanges);

const removedKeys = tempRemovedTimeRanges
  .flatMap(obj => Object.values(obj))
  .filter(dayArray => dayArray.some(dayObj => Object.keys(dayObj)[0] === elementToInsert))
  .flatMap(dayArray =>
    dayArray
      .filter(dayObj => Object.keys(dayObj)[0] === elementToInsert)
      .flatMap(dayObj => dayObj[elementToInsert].flatMap(range => Object.keys(range)))
  );

console.log(removedKeys);

当前问题

代码输出空数组[],期望输出为所有时间范围KEYS组成的数组,例如['T_04:00_Start', 'T_08:00_End', ...]


修复方案

方案1:提取所有时间范围KEYS

如果需求是提取所有时间范围的键,直接去掉不必要的过滤逻辑,简化层级处理:

console.log(tempRemovedTimeRanges);

const removedKeys = tempRemovedTimeRanges
  .flatMap(obj => Object.values(obj)) // 展开每个日期对象对应的时间范围数组
  .flatMap(dayArray => dayArray) // 展开数组中的每个时间范围对象
  .flatMap(dayObj => Object.keys(dayObj)); // 提取每个对象的所有键

console.log(removedKeys);

方案2:提取特定elementToInsert关联的KEYS

如果你的需求是只提取与elementToInsert相关的时间范围键,修复原代码中的判断逻辑和层级错误:

console.log(tempRemovedTimeRanges);

const removedKeys = tempRemovedTimeRanges
  .flatMap(obj => Object.values(obj))
  .flatMap(dayArray => 
    // 过滤出包含elementToInsert键的对象
    dayArray.filter(dayObj => Object.keys(dayObj).includes(elementToInsert))
    // 提取该键对应值的所有时间范围键
    .flatMap(dayObj => Object.keys(dayObj[elementToInsert]))
  );

console.log(removedKeys);

原代码错误分析

  1. 不必要的过滤逻辑:原代码强行筛选Object.keys(dayObj)[0] === elementToInsert的对象,若elementToInsert不是对象的第一个键,或你需要提取所有键,这会导致数据被错误过滤。
  2. 层级处理错误:原代码中dayObj[elementToInsert].flatMap(...)假设dayObj[elementToInsert]是数组,但如果它本身就是时间范围对象,flatMap会报错或返回空值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 03:43:17