使用JS/Node Reduce按多属性分组汇总JSON数据并关联原对象
解决方案
实现思路
- 第一步:先遍历所有日程,按
LocalDate分组统计四个指定属性的分布数据,生成「日期-对应统计结果」的映射表 - 第二步:遍历原始日程数组,给每个日程对象追加对应日期的统计结果作为
Summary字段即可
完整代码
// 原始数据 const rawData = { "Schedule": [ // 填入你的原始日程数据 ] }; // 指定需要统计的属性 const statsProps = ['InsuranceName', 'InsuranceFinancialClass', 'AppointmentName', 'LocalDate']; // 第一步:生成按日期分组的统计映射表 const dateStatsMap = rawData.Schedule.reduce((map, item) => { const dateKey = item.LocalDate; // 首次遇到该日期则初始化统计结构 if (!map[dateKey]) { map[dateKey] = statsProps.reduce((initObj, prop) => { initObj[prop] = { Total: 0 }; return initObj; }, {}); } const dateStats = map[dateKey]; // 对指定属性逐个累加统计 statsProps.forEach(prop => { const propValue = item[prop]; dateStats[prop].Total += 1; dateStats[prop][propValue] = (dateStats[prop][propValue] || 0) + 1; }); return map; }, {}); // 第二步:给每个原始日程追加Summary字段,得到最终结果 const finalResult = { Schedule: rawData.Schedule.map(item => ({ ...item, // 保留原有所有字段 Summary: dateStatsMap[item.LocalDate] // 追加对应日期的统计结果 })) };
说明
你给出的预期输出中,11/02/2021对应的Summary.AppointmentName里出现了InPerson: 1属于笔误,该日期下没有对应类型的预约,正常统计结果不会包含该字段。
内容的提问来源于stack exchange,提问作者Andy P.
相关产品推荐
相关产品推荐

