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

JavaScript合并按周/分类统计的JSON数据遇阻,求解决方案

解决JavaScript多维度JSON数据合并:按用户、月份、会议分类整合周计数

问题背景

你手头有一组包含用户、周、会议分类、月份和计数的JSON数据,想要按UserName、month(对应原数据的monthinwords)、meetingHash(对应原数据的MeetingHash)三个维度合并,把Week 1到Week 4的计数整合到同一行,没有数据的周填0。但目前用map处理时,同一维度下的不同周会生成多条记录(比如用户Sarathy Devaraju在5月、分类为Hold/Uncategorized的Week1和Week2数据分成了两行),需要调整成目标结构。

核心思路

用reduce方法创建一个以用户-月份-会议分类组合为唯一键的临时对象,遍历原始数据时,把对应周的计数填充到该键对应的对象中。初始时每个合并对象的Week1到Week4都设为0,再用实际数据覆盖有值的周,最后把临时对象转成数组即可。

完整代码示例

首先看原始数据示例:

const data = [
  { "UserName": "Sarathy Devaraju", "week": "Week 1", "MeetingHash": "Hold/Uncategorized", "monthinwords": "May", "count": 2 },
  { "UserName": "Sarathy Devaraju", "week": "Week 2", "MeetingHash": "Hold/Uncategorized", "monthinwords": "May", "count": 3 },
  { "UserName": "John Doe", "week": "Week 3", "MeetingHash": "Project Sync", "monthinwords": "May", "count": 1 },
  // 更多数据...
];

然后是处理代码:

const WEEKS = ["Week 1", "Week 2", "Week 3", "Week 4"];
// 周名称映射:把"Week 1"转成"Week1",匹配目标输出的字段名
const weekKeyMap = WEEKS.reduce((map, week) => {
  map[week] = week.replace(' ', '');
  return map;
}, {});

const mergedResult = data.reduce((acc, item) => {
  // 生成唯一分组键:用户-月份-会议分类
  const groupKey = `${item.UserName}-${item.monthinwords}-${item.MeetingHash}`;
  
  // 如果该分组还不存在,初始化一个对象,Week1到Week4默认0
  if (!acc[groupKey]) {
    acc[groupKey] = {
      UserName: item.UserName,
      month: item.monthinwords,
      meetingHash: item.MeetingHash,
      Week1: 0,
      Week2: 0,
      Week3: 0,
      Week4: 0
    };
  }
  
  // 把当前item的count赋值到对应的周字段
  const targetWeekKey = weekKeyMap[item.week];
  acc[groupKey][targetWeekKey] = item.count;
  
  return acc;
}, {});

// 把临时对象的值转成数组,得到最终结果
const result = Object.values(mergedResult);

期望输出示例

运行上述代码后,你会得到如下结构的结果:

[
  {
    "UserName": "Sarathy Devaraju",
    "month": "May",
    "meetingHash": "Hold/Uncategorized",
    "Week1": 2,
    "Week2": 3,
    "Week3": 0,
    "Week4": 0
  },
  {
    "UserName": "John Doe",
    "month": "May",
    "meetingHash": "Project Sync",
    "Week1": 0,
    "Week2": 0,
    "Week3": 1,
    "Week4": 0
  }
]

关键说明

  • 分组键的设计:用用户、月份、会议分类的组合作为唯一键,确保同一维度的记录会被合并到同一个对象中。
  • 默认值初始化:每个新分组都会先设置Week1到Week4为0,避免出现缺失字段的情况。
  • 周名称转换:通过weekKeyMap把原始的"Week 1"格式转换成目标的"Week1"字段名,保证输出结构符合要求。

内容的提问来源于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 16:57:44