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

如何使用JavaScript reduce方法对订单对象数组做多维度统计

解决方案

核心思路

reduce的第二个参数直接定义为包含所有统计字段的初始对象,额外新增一个Set类型的临时字段存储出现过的doctorId用来计算唯一用户数,遍历完成后再计算最终的派生字段(唯一用户总数、人均销售额)即可。

完整实现代码

const result = orders.reduce((acc, order) => {
  // 计算当前订单含税金额
  const currentAmountWithTax = order.amount * (1 + order.tax);
  // 更新通用统计字段
  acc.totalOrders += 1;
  acc.allAmountWithTax += currentAmountWithTax;
  acc.uniqueDoctorIds.add(order.doctorId);
  // 处理有争议订单统计逻辑
  if (order.isDisputed) {
    acc.totalDisputedOrders += 1;
    acc.disputedAmountWithTax += currentAmountWithTax;
  }
  return acc;
}, {
  // 初始统计对象
  totalOrders: 0,
  totalDisputedOrders: 0,
  disputedAmountWithTax: 0,
  allAmountWithTax: 0,
  uniqueDoctorIds: new Set()
});
// 遍历完成后计算派生字段
result.uniqueUserCount = result.uniqueDoctorIds.size;
result.avgSalePerUser = result.uniqueUserCount ? (result.allAmountWithTax / result.uniqueUserCount) : 0;
// 删除临时存储的Set字段,符合预期输出要求
delete result.uniqueDoctorIds;

console.log(result);

输出结果验证

样例数据的输出结果如下,金额可按需调用toFixed(2)保留两位小数:

{
  totalOrders: 6,
  totalDisputedOrders: 3,
  disputedAmountWithTax: 32448.971,
  allAmountWithTax: 37006.154799999996,
  uniqueUserCount: 3,
  avgSalePerUser: 12335.384933333332
}

注意事项

你原代码中写的collections.reduce需要替换为orders.reduce,和给定的数组变量名保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:45:01