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

如何使用Array.reduce将对象数组按name分组聚合id为对应数组?

实现代码

const obj = arr.reduce((acc, info) => {
    // 若当前name未在累加对象中存在,先初始化为空数组
    if (!acc[info.name]) {
        acc[info.name] = [];
    }
    // 将当前id追加到对应数组中
    acc[info.name].push(info.id);
    return acc;
}, {});

逻辑说明

Array.reduce的第一个参数是累加器acc,初始值是我们传入的空对象{},每次遍历数组元素时:

  • 先检查累加对象里有没有对应name的键,没有的话先创建空数组作为值
  • 把当前元素的id push到这个数组里即可

原有代码问题

你写的acc[info[name]]存在语法错误:name是对象的固定属性名,要么用点语法info.name,要么用字符串形式的方括号写法info['name'],直接写info[name]会把name当成变量读取,找不到对应变量会直接报错。

简洁写法(ES2020+支持)

用解构赋值+空值合并赋值运算符可以写成一行:

const obj = arr.reduce((acc, {name, id}) => ((acc[name] ??= []).push(id), acc), {})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 13:27:03