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

JavaScript按employee_name和commission_date汇总commission_price

按员工姓名+日期汇总佣金金额的解决方案

你之前的代码只把employee_name作为分组依据,所以只会按员工汇总所有日期的佣金,没考虑同一员工不同日期的区分。要实现按员工姓名+日期共同分组,核心是构建一个包含两个字段的复合键来标识唯一分组。

修正后的代码

const data = [
  { "employee_name": "Employee A", "commission_date": "14/05/2018", "commission_price": 9000 },
  { "employee_name": "Employee A", "commission_date": "17/05/2018", "commission_price": 5000 },
  { "employee_name": "Employee B", "commission_date": "18/05/2018", "commission_price": 2000 },
  { "employee_name": "Employee B", "commission_date": "18/05/2018", "commission_price": 5000 },
  { "employee_name": "Employee B", "commission_date": "19/05/2018", "commission_price": 500 }
];

const result = Object.values(data.reduce((acc, curr) => {
  // 构建复合键:员工姓名+日期,确保同一员工同一天的记录被归为一组
  const key = `${curr.employee_name}|${curr.commission_date}`;
  
  // 如果该分组不存在,初始化分组对象
  if (!acc[key]) {
    acc[key] = {
      employee_name: curr.employee_name,
      commission_date: curr.commission_date,
      commission_price: 0
    };
  }
  
  // 累加当前记录的佣金金额
  acc[key].commission_price += curr.commission_price;
  
  return acc;
}, {}));

console.log(result);

代码说明

  • 复合键设计:用${employee_name}|${commission_date}作为分组的唯一标识,这样同一员工同一天的所有记录会被映射到同一个key下,不同员工或不同日期的记录会被区分开。
  • 分组初始化:当第一次遇到某个复合键时,创建一个包含员工姓名、日期,且佣金初始为0的对象。
  • 佣金累加:每遍历一条记录,就将对应分组的佣金加上当前记录的金额。

输出结果

运行后会得到你期望的格式:

[
  { "employee_name": "Employee A", "commission_date": "14/05/2018", "commission_price": 9000 },
  { "employee_name": "Employee A", "commission_date": "17/05/2018", "commission_price": 5000 },
  { "employee_name": "Employee B", "commission_date": "18/05/2018", "commission_price": 7000 },
  { "employee_name": "Employee B", "commission_date": "19/05/2018", "commission_price": 500 }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:16:51