JavaScript如何将对象数组转换为按字段聚合的映射结构
实现对象数组到字段聚合映射的方法
基础实现(forEach遍历)
核心逻辑是遍历数组中的每个对象,逐个收集所有字段的对应值存入结果:
const arr = [ { name:"test", class:3 }, { name:"test2", class:4 }, { name:"test3", class:5 }, ] const map = {} arr.forEach(item => { // 遍历当前对象的所有属性键 Object.keys(item).forEach(key => { // 结果对象无该键则先初始化空数组 if (!map[key]) map[key] = [] // 推入当前属性值 map[key].push(item[key]) }) }) console.log(map) // 输出符合要求的结构
简化实现(reduce累积)
用数组reduce方法直接累积结果,代码更简洁:
const map = arr.reduce((acc, cur) => { Object.keys(cur).forEach(key => { acc[key] = acc[key] || [] acc[key].push(cur[key]) }) return acc }, {})
注意事项
- 如果原数组内的对象存在缺写字段的情况,对应字段的数组会跳过缺写的项,如需补占位值可在push前加判断逻辑。
- 该实现支持任意数量的对象字段,无需提前指定字段名,适配动态字段的场景。
内容的提问来源于stack exchange,提问作者rudeTool
相关产品推荐
相关产品推荐

