如何按pure_id字段对多组对象数组进行分组?
嘿,这个按pure_id字段分组的需求其实挺常见的,我给你分享几个JavaScript里靠谱的实现方案,肯定能解决你的问题:
方法一:使用Array.prototype.reduce()(最经典高效)
这是处理数组分组最常用的方式,代码简洁且性能出色:
// 你的原始数组 const originalArray = [ {"pure_id":"1","branch_id":"45"}, {"pure_id":"2","branch_id":"45"}, {"pure_id":"3","branch_id":"45"}, {"pure_id":"3","branch_id":"45"} ]; // 用reduce实现分组 const groupedByPureId = originalArray.reduce((accumulator, currentItem) => { // 提取当前项的pure_id作为分组键 const groupKey = currentItem.pure_id; // 如果累加器里还没有这个分组,就初始化一个空数组 if (!accumulator[groupKey]) { accumulator[groupKey] = []; } // 将当前项推入对应的分组数组 accumulator[groupKey].push(currentItem); return accumulator; }, {}); // 初始值设为空对象 console.log(groupedByPureId);
运行这段代码后,你会得到完全符合预期的结果:以pure_id为键,对应值是同pure_id的对象数组。
方法二:使用ES6 Map + Object.fromEntries()
如果你更喜欢用ES6的Map结构来管理分组,这种方式逻辑更清晰:
const originalArray = [ {"pure_id":"1","branch_id":"45"}, {"pure_id":"2","branch_id":"45"}, {"pure_id":"3","branch_id":"45"}, {"pure_id":"3","branch_id":"45"} ]; // 初始化一个Map来存储分组 const groupMap = new Map(); originalArray.forEach(item => { const key = item.pure_id; // 如果Map中没有该键,就创建一个空数组 if (!groupMap.has(key)) { groupMap.set(key, []); } // 将当前项加入对应分组 groupMap.get(key).push(item); }); // 把Map转换为普通对象(和reduce的输出格式一致) const groupedByPureId = Object.fromEntries(groupMap); console.log(groupedByPureId);
方法三:原生Array.prototype.group()(ES2023+)
如果你的运行环境支持ES2023及以上版本(比如现代浏览器、Node.js 21+),可以用原生的分组方法,代码极简:
const groupedByPureId = originalArray.group(item => item.pure_id);
不过要注意兼容性,如果需要兼容旧环境,可能需要添加polyfill或者转译工具处理。
内容的提问来源于stack exchange,提问作者Rama
相关产品推荐
相关产品推荐

