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

如何用JavaScript的reduce方法重组会议统计JSON为指定结构

正确实现会议统计数据重组方案

我来帮你搞定这个数据重组的问题!你的原代码只完成了收集周数的第一步,没有覆盖到UserName、month、meetingHash这三个核心分组维度,也没正确映射每个周的会议次数。咱们来写一个符合需求的实现:

实现思路

  1. 先固定所有需要的周字段(Week1到Week4,哪怕数据里没有也要保留并设为0)
  2. 用UserName|month|meetingHash作为唯一分组键,确保每个组合只生成一条记录
  3. 初始化每条记录时,先把所有周的次数设为0,再根据原始数据更新对应周的数值
  4. 最后把分组后的对象转换成数组格式

完整代码

const data=[
 { "UserName": "Sarathy Devaraju", "week": "Week 1", "MeetingHash": "Hold/Uncategorized", "monthinwords": "May", "count": 2 },
 { "UserName": "Sarathy Devaraju", "week": "Week 2", "MeetingHash": "1st Presentation / Meeting", "monthinwords": "Jun", "count": 1 },
 { "UserName": "Sarathy Devaraju", "week": "Week 1", "MeetingHash": "Follow-On Meetings", "monthinwords": "Jun", "count": 1 },
 { "UserName": "Sarathy Devaraju", "week": "Week 2", "MeetingHash": "1st Presentation / Meeting", "monthinwords": "May", "count": 1 },
 { "UserName": "Sarathy Devaraju", "week": "Week 3", "MeetingHash": "Follow-On Meetings", "monthinwords": "July", "count": 1 },
 { "UserName": "Priya", "week": "Week 1", "MeetingHash": "Hold/Uncategorized", "monthinwords": "May", "count": 2 },
 { "UserName": "Priya", "week": "Week 2", "MeetingHash": "1st Presentation / Meeting", "monthinwords": "Jun", "count": 1 },
 { "UserName": "Priya", "week": "Week 1", "MeetingHash": "Follow-On Meetings", "monthinwords": "Jun", "count": 1 },
 { "UserName": "Priya", "week": "Week 2", "MeetingHash": "1st Presentation / Meeting", "monthinwords": "May", "count": 1 },
 { "UserName": "Priya", "week": "Week 1", "MeetingHash": "Follow-On Meetings", "monthinwords": "July", "count": 1 }
];

// 定义所有需要的周字段,确保Week1到Week4都存在
const allWeeks = ['Week 1', 'Week 2', 'Week 3', 'Week 4'];

// 处理月份缩写(比如July转成Jul,匹配你期望的格式)
const formatMonth = (month) => {
  const monthMap = {
    'July': 'Jul',
    // 其他月份如果需要调整可以补充
  };
  return monthMap[month] || month;
};

// 核心reduce逻辑
const result = Object.values(data.reduce((acc, row) => {
  // 生成唯一分组键:UserName+月份+会议类型
  const key = `${row.UserName}|${formatMonth(row.monthinwords)}|${row.MeetingHash}`;
  
  // 如果该分组不存在,初始化基础结构
  if (!acc[key]) {
    acc[key] = {
      UserName: row.UserName,
      month: formatMonth(row.monthinwords),
      meetingHash: row.MeetingHash,
      // 初始化所有周的count为0
      ...Object.fromEntries(allWeeks.map(week => [week.replace(' ', ''), 0]))
    };
  }
  
  // 更新当前周的count值
  const weekKey = row.week.replace(' ', ''); // 把"Week 1"转成"Week1"
  acc[key][weekKey] += row.count;
  
  return acc;
}, {}));

console.log(result);

代码解释

  • formatMonth函数:处理月份缩写,把原始数据里的July转换成你期望的Jul,如果有其他月份需要调整可以直接补充映射
  • 分组键key:确保每个UserName+month+meetingHash的组合唯一,避免重复生成记录
  • 初始化结构时,用Object.fromEntries把所有周字段设为0,保证输出结构完整
  • 最后用Object.values把分组对象转换成数组,就是你想要的格式

运行这段代码后,输出的结果就完全匹配你期望的JSON结构啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 17:27:41