如何在Node.js中从ORM数据库解析JSON并合并同日期数据?
如何在Node.js中合并员工每日销售数据并转换为指定JSON格式?
我从ORM数据库查询得到员工每日销售数据,原始数据如下:
| date | month | total_employee | total_revenue | empName | emp_sales |
|---|---|---|---|---|---|
| 2022-10-26 | October | 2 | 620 | NameA | 620 |
| 2022-10-21 | October | 2 | 300 | NameA | 300 |
| 2022-10-21 | October | 2 | 290 | NameB | 290 |
需要将这些数据转换为指定JSON格式传给前端,核心要求:
- 合并同日期的行
- 汇总当日总营收
- 将员工销售数据整理为
total_sales数组
目标JSON格式示例:
[ { "date": "2022-10-26", "month": "October", "total_employee": 2, "total_revenue": 620.00, "total_sales": [{"NameA": 620.00}] }, { "date": "2022-10-21", "month": "October", "total_employee": 2, "total_revenue": 590.00, "total_sales": [{"NameA": 300.00},{"NameB": 290.00}] } ]
实现代码
可以利用数组reduce方法完成分组、汇总和格式转换,代码简洁高效:
// 假设从ORM获取的原始数据 const rawSalesData = [ { date: '2022-10-26', month: 'October', total_employee: 2, total_revenue: 620, empName: 'NameA', emp_sales: 620 }, { date: '2022-10-21', month: 'October', total_employee: 2, total_revenue: 300, empName: 'NameA', emp_sales: 300 }, { date: '2022-10-21', month: 'October', total_employee: 2, total_revenue: 290, empName: 'NameB', emp_sales: 290 } ]; // 数据转换逻辑 const formattedData = Object.values(rawSalesData.reduce((grouped, item) => { const dateKey = item.date; // 初始化当日数据结构 if (!grouped[dateKey]) { grouped[dateKey] = { date: item.date, month: item.month, total_employee: item.total_employee, total_revenue: 0, total_sales: [] }; } // 累加当日总营收(直接用员工销售额累加更准确) grouped[dateKey].total_revenue += item.emp_sales; // 添加单员工销售记录到数组 grouped[dateKey].total_sales.push({ [item.empName]: parseFloat(item.emp_sales.toFixed(2)) }); // 格式化总营收为两位小数 grouped[dateKey].total_revenue = parseFloat(grouped[dateKey].total_revenue.toFixed(2)); return grouped; }, {})); // 输出结果(可直接传给前端) console.log(JSON.stringify(formattedData, null, 2));
代码说明
- 分组逻辑:以
date作为分组键,将同日期的数据聚合到同一对象中 - 营收汇总:直接累加每个员工的
emp_sales得到当日总营收(规避原始数据中total_revenue仅为单员工数据的问题) - 格式处理:用
toFixed(2)和parseFloat确保金额保留两位小数,符合前端展示需求 - 数组转换:用
Object.values将分组后的对象转为数组,匹配目标JSON的结构
内容的提问来源于stack exchange,提问作者PandoraV2
相关产品推荐
相关产品推荐

