如何对对象数组按id进行groupBy,将分组结果拼接为单个数组?
实现方案(JavaScript版本)
直接通过Array.prototype.reduce完成分组,逻辑简洁高效,支持通用指定分组key:
function groupByKey(arr, groupKey) { return Object.values( arr.reduce((groupMap, currentItem) => { const keyValue = currentItem[groupKey] // 若当前key不存在分组则初始化 if (!groupMap[keyValue]) { groupMap[keyValue] = [] } groupMap[keyValue].push(currentItem) return groupMap }, {}) ) }
调用测试
针对你给出的示例参数调用即可得到预期结果:
const payload = [ { id: 1, name: 'a' }, { id: 1, name: 'b' }, { id: 1, name: 'c' }, { id: 2, name: 'b' }, { id: 2, name: 'c' } ] // 指定按id分组 const result = groupByKey(payload, 'id') console.log(result)
逻辑说明
- 第一步用reduce遍历原数组,生成以分组key值为属性名、对应同组元素数组为属性值的临时对象
- 第二步用
Object.values提取临时对象所有属性值,直接得到由各分组子数组组成的最终结果 - 方法可通用,修改第二个入参即可按其他任意字段分组
内容的提问来源于stack exchange,提问作者AsZik
相关产品推荐
相关产品推荐

