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

TypeScript中合并name属性相同的数组对象方法咨询

使用reduce合并相同name的series数组

你完全可以用reduce方法实现这个合并逻辑,以下是具体代码:

const values = [
    {
      "name": "Patient Introductions",
      "series": [{"name": "Organization ABC", "value": 3}]
    },
    {
      "name": "Patient Assessment",
      "series": [{"name": "Organization ABC", "value": 2.5}]
    },
    {
      "name": "Patient Introductions",
      "series": [{"name": "Organization XYZ", "value": 2.5}]
    },
    {
      "name": "Patient Assessment",
      "series": [{"name": "Organization XYZ", "value": 3.3}]
    }
];

const output = Object.values(values.reduce((acc, item) => {
  // 检查累加器中是否已有当前name对应的条目
  if (acc[item.name]) {
    // 合并series数组
    acc[item.name].series = acc[item.name].series.concat(item.series);
  } else {
    // 若没有,添加新条目到累加器
    acc[item.name] = {...item}; // 解构创建新对象,避免修改原数组元素
  }
  return acc;
}, {}));

console.log(output);

逻辑解释:

  1. 初始化累加器:reduce的第二个参数是初始值,这里用空对象{},用来存储以name为键、合并后的对象为值的映射。
  2. 遍历处理每个元素:
    • 如果当前元素的name已经在累加器中存在,就用concat把当前元素的series数组合并到已有条目的series里。
    • 如果不存在,就把当前元素解构后存入累加器(用{...item}是为了创建新对象,避免后续操作修改原数组的元素)。
  3. 转换为目标数组:最后用Object.values()提取累加器中的所有值,得到你需要的格式数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:01:05