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

如何在Node.js中从ORM数据库解析JSON并合并同日期数据?

如何在Node.js中合并员工每日销售数据并转换为指定JSON格式?

我从ORM数据库查询得到员工每日销售数据,原始数据如下:

datemonthtotal_employeetotal_revenueempNameemp_sales
2022-10-26October2620NameA620
2022-10-21October2300NameA300
2022-10-21October2290NameB290

需要将这些数据转换为指定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));

代码说明

  1. 分组逻辑:以date作为分组键,将同日期的数据聚合到同一对象中
  2. 营收汇总:直接累加每个员工的emp_sales得到当日总营收(规避原始数据中total_revenue仅为单员工数据的问题)
  3. 格式处理:用toFixed(2)和parseFloat确保金额保留两位小数,符合前端展示需求
  4. 数组转换:用Object.values将分组后的对象转为数组,匹配目标JSON的结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:46:10