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

JavaScript如何按相同id合并数组对象并累加金额生成对应sku字段

问题原因
  • 核心问题是你在每次遍历时都直接给res[obj.id]重新赋值新对象,会把该id下之前已经生成的sku_*等已存在的字段完全覆盖
  • 你使用数组作为reduce的初始累加器,但用字符串类型的id作为属性名存储数据,不符合数组的使用规范,也不利于后续转换为目标结构
修改后的代码
const result = Object.values(orderResults.reduce((res, obj) => {
    // 不存在对应id的对象时先初始化,避免覆盖已有数据
    if (!res[obj.id]) {
        res[obj.id] = {
            id: obj.id,
            name: obj.name,
            total_amount: 0
        }
    }
    // 累加支付金额
    res[obj.id].total_amount += obj.payment_amount
    // 按要求拼接sku字段名赋值
    res[obj.id][`sku_${obj.seq}`] = obj.sku
    return res
}, {})) // 初始累加器用对象,方便按id做key去重
代码说明
  • 初始累加器改用空对象{},以id为键存储合并后的条目,避免数组的索引问题
  • 只有当对应id的条目不存在时才初始化,不会覆盖已有数据
  • 累加金额逻辑单独处理,不会重置已有的sku字段
  • 最后通过Object.values()直接把存储合并结果的对象转为你需要的数组格式
  • 修正了原代码sku字段名缺失下划线的问题,和要求的sku_1、sku_2格式对齐

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:39:02