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
相关产品推荐
相关产品推荐

