You need to enable JavaScript to run this app. JavaScript如何按name分组嵌套对象并汇总重量及各grade分值
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何按name分组嵌套对象并汇总重量及各grade分值

分组求和实现方案

核心实现逻辑

你可以直接用Array.reduce完成分组累加,逻辑很容易理解:

  • 用一个对象作为累加容器,key为name值,value为对应name的累计结果
  • 遍历每一条数据时,若当前name已存在于容器中,直接累加对应的weight、grade各分项;若不存在则初始化一条新记录
  • 最后把容器的value转成数组就是你需要的最终结果

完整实现代码

// inputData即你生成的a数组
function groupAndSum(inputData) {
  const groupResult = inputData.reduce((acc, current) => {
    const name = current.name
    // 首次遇到该name时初始化累加结构
    if (!acc[name]) {
      acc[name] = {
        name: name,
        weightTotal: 0,
        grade: {
          grade1total: 0,
          grade2total: 0,
          grade3total: 0
        }
      }
    }
    // 累加总重量
    acc[name].weightTotal += current.avgTotalWeight
    // 累加各等级分值
    acc[name].grade.grade1total += current.grade.grade1
    acc[name].grade.grade2total += current.grade.grade2
    acc[name].grade.grade3total += current.grade.grade3
    return acc
  }, {})
  // 把分组对象转为数组输出
  return Object.values(groupResult)
}

运行效果

把你提供的示例数据传入函数后,返回结果如下:

[
  {
    name: "france Naicin",
    weightTotal: 58,
    grade: {
      grade1total: 58,
      grade2total: 0,
      grade3total: 0
    }
  },
  {
    name: "pacific gigas",
    weightTotal: 16,
    grade: {
      grade1total: 16,
      grade2total: 0,
      grade3total: 0
    }
  }
]

额外优化点

你之前生成a数组的代码里,grade的赋值逻辑可以简化,无需写多段if判断:

// 替换原来的grade赋值代码即可
const grade1 = alias === "G1" ? avgTotalWeight : 0
const grade2 = alias === "G2" ? avgTotalWeight : 0
const grade3 = alias === "G3" ? avgTotalWeight : 0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 11:24:03