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

如何使用map或reduce方法将指定对象数组转换为目标结构数组?

解决方案

可以使用reduce结合Object.fromEntries实现需求,核心思路是先按日期分组收集事件类型,再根据分组结果生成目标结构。

完整代码示例

const October = [
  { event_category: 'EVENT', date: '2022-10-02', detail: 'event' },
  { event_category: 'TASK', date: '2022-10-03', detail: 'task' },
  { event_category: 'EVENT', date: '2022-10-04', detail: 'event 1' },
  { event_category: 'TASK', date: '2022-10-04', detail: 'task 1' },
  { event_category: 'TASK', date: '2022-10-04', detail: 'task 2' },
];

// 1. 按日期分组,收集每个日期下的所有事件类型(自动去重)
const groupedByDate = October.reduce((acc, item) => {
  const { date, event_category } = item;
  if (!acc[date]) {
    acc[date] = new Set();
  }
  acc[date].add(event_category);
  return acc;
}, {});

// 2. 根据分组结果生成目标结构
const resultObject = Object.fromEntries(
  Object.entries(groupedByDate).map(([date, categories]) => {
    let combinedCategory;
    // 判断是否同时包含两种类型
    if (categories.has('TASK') && categories.has('EVENT')) {
      combinedCategory = 'TASK_EVENT';
    } else {
      // 单一类型直接取对应值
      combinedCategory = [...categories][0];
    }
    return [date, { event_category: combinedCategory, date }];
  })
);

// 3. 包装成目标数组结构
const newOct = [resultObject];

console.log(newOct);

代码说明

  • 分组阶段:用reduce遍历原数组,以日期为键,通过Set存储对应事件类型,避免重复记录同一类型。
  • 转换阶段:将分组对象转为键值对数组后遍历,根据类型集合判断最终分类:同时存在TASK和EVENT则合并为TASK_EVENT,否则直接使用单一类型。
  • 最终包装:将转换后的对象放入数组,得到目标结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:45:37