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

JavaScript合并动态键对象数组 仅对键名含_abs的字段值求和

需求说明

现有如下结构的对象数组:

[
  {"A_abs":4,"A_perc":2, "B_abs":4,"B_perc":2, ...},
  {"A_abs":4,"A_perc":2, "B_abs":4,"B_perc":2, ...},
  {"A_abs":4,"A_perc":2, "B_abs":4,"B_perc":2, ...},
  {"A_abs":4,"A_perc":2, "B_abs":4,"B_perc":2, ...}
]

处理规则:

  • 每个对象可包含任意n组键值对,每类指标都对应带_perc和_abs后缀的两个字段
  • 数组归约为单个对象:所有键名带_abs后缀的字段值累加求和,所有_perc后缀字段统一赋值为"-"
    预期输出格式:
{"A_abs": 16, "A_perc": "-", "B_abs": 16, "B_perc": "-", "C_abs": x, "C_perc": "-", ...}

原有参考的通用reduce求和逻辑会对所有字段无差别累加,无法区分_abs和_perc字段,不符合需求,原代码如下:

var data = [{"A_abs":4,"A_perc":2, "B_abs":4,"B_perc":2},{"A_abs":4,"A_perc":2, "B_abs":4,"B_perc":2},{"A_abs":4,"A_perc":2, "B_abs":4,"B_perc":2},{"A_abs":4,"A_perc":2, "B_abs":4,"B_perc":2}],
    result = data.reduce((r, o) => (Object.entries(o).forEach(([k, v]) => r[k] = (r[k] || 0) + v), r), {});

console.log(result);
实现代码

只需要在遍历键值对时增加后缀判断逻辑即可,无需提前预知字段数量、字段前缀,自动适配所有符合后缀规则的字段:

const data = [
  {"A_abs":4,"A_perc":2, "B_abs":4,"B_perc":2},
  {"A_abs":4,"A_perc":2, "B_abs":4,"B_perc":2},
  {"A_abs":4,"A_perc":2, "B_abs":4,"B_perc":2},
  {"A_abs":4,"A_perc":2, "B_abs":4,"B_perc":2}
];

const result = data.reduce((acc, cur) => {
  Object.entries(cur).forEach(([key, val]) => {
    if (key.endsWith('_abs')) {
      // 仅_abs后缀字段执行累加
      acc[key] = (acc[key] || 0) + val;
    } else if (key.endsWith('_perc')) {
      // _perc字段固定赋值为"-"
      acc[key] = "-";
    }
  });
  return acc;
}, {});

console.log(result);
// 运行输出:{A_abs: 16, A_perc: "-", B_abs: 16, B_perc: "-"}

该逻辑兼容性强,后续新增任意指标(比如C、D、E类的_abs/_perc字段)都不需要修改代码,会自动完成累加和赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 02:36:31