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

JavaScript如何将对象数组按键分组为同结构的键值集合对象

对象数组按键分组归集实现方案

针对你需要的「将数组内同键名的值归集到对应数组、生成单对象结构」的需求,最简洁高效的通用实现是基于reduce方法的写法,时间复杂度为O(n),仅需一次遍历即可生成结果,且不需要提前预知对象的键名,适配性更强。


核心实现代码

// 源数据
const list = [
    {
        "product": "name 1",
        "price": "3000",
        "inspection": false,
    },
    {
        "product": "name 2",
        "price": "1000",
        "inspection": true,
    },
    {
        "product": "name 3",
        "price": "5000",
        "inspection": false,
    },
]

// 分组归集逻辑
const grouped = list.reduce((collector, currentItem) => {
  Object.keys(currentItem).forEach(key => {
    // 首次遇到该键时初始化空数组
    if (!collector[key]) collector[key] = []
    // 将当前项对应键的值存入数组
    collector[key].push(currentItem[key])
  })
  return collector
}, {}) // 传入空对象作为初始归集容器

输出结果

执行代码后grouped变量的值完全匹配预期结构:

{
    "product": ["name 1", "name 2", "name 3"],
    "price": ["3000", "1000", "5000"],
    "inspection": [false, true, false]
}

实现说明

  • 通用性强:不需要提前声明所有键名,后续源数据对象新增/删除字段,代码会自动适配生成对应分组
  • 性能优异:仅对源数组做一次全量遍历,单对象键遍历的额外开销极低,适合绝大多数数据量场景
  • 之前使用reduce未得到正确结果,通常是漏传初始空对象、或者未做首次键的数组初始化导致的,按上述写法即可规避问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:36:56