JS如何按measureId分组部门数据并聚合值生成目标结构数组
实现方案
核心处理逻辑分3步:
- 遍历按部门分组的源对象,拿到每个部门名称和对应的条目列表
- 对单个部门的所有条目,以
measure${measureId}为键累加measureValue,自动合并相同measureId的数值 - 把部门名和累加后的指标值组装为对象,最终收集为结果数组
可直接运行的代码
// 替换为你接口返回的源数据即可 const sourceData = { "Account Management": [ { "rowId": 1288, "departmentExternalId": "7", "departmentName": "Account Management", "measureName": "Total Headcount Expense", "measureId": 15, "measureValue": 17282, }, { "rowId": 1289, "departmentExternalId": "7", "departmentName": "Account Management", "measureName": "Salary", "measureId": 5, "measureValue": 11666, }, ], "Client Services General (COR)": [ { "rowId": 1294, "departmentExternalId": "114", "departmentName": "Client Services General (COR)", "measureName": "Total Headcount", "measureId": 2, "measureValue": 1, }, { "rowId": 1295, "departmentExternalId": "114", "departmentName": "Client Services General (COR)", "measureName": "Total Headcount", "measureId": 2, "measureValue": 100, } ] }; const result = Object.entries(sourceData).map(([department, entries]) => { const deptItem = { department }; entries.forEach(({ measureId, measureValue }) => { const key = `measure${measureId}`; deptItem[key] = (deptItem[key] ?? 0) + measureValue; }); return deptItem; });
运行后输出的结果和你预期的结构完全一致:
[ {department: "Account Management", measure15: 17282, measure5: 11666}, {department: "Client Services General (COR)", measure2: 101} ]
低版本JS环境兼容写法
如果运行环境不支持Object.entries或者空值合并运算符??,可以换成下面的写法:
var result = Object.keys(sourceData).map(function(department) { var deptItem = { department: department }; sourceData[department].forEach(function(item) { var key = 'measure' + item.measureId; deptItem[key] = (deptItem[key] || 0) + item.measureValue; }); return deptItem; });
内容的提问来源于stack exchange,提问作者stratdev
相关产品推荐
相关产品推荐

