reduce 可通过累加器(对象或map)实现高效数据分组,核心是按字段提取键并将元素归入对应键的数组中;支持单字段、多级及动态键分组,推荐用展开语法或map.set()保证健壮性。

reduce 是 JavaScript 数组中功能最强大的方法之一,它本身不直接分组,但配合对象或 Map 作为累加器,就能高效实现数据分组——核心在于把“相同分类的数据归到同一个键下”。
理解 reduce 分组的基本逻辑
分组的本质是:遍历数组,根据某个字段(如 category、type、status)提取分类标识,然后把当前项 push 到对应分类的数组里。reduce 的累加器(acc)通常初始化为一个空对象 {} 或 new Map(),每次迭代更新这个结构。
- acc 是“结果容器”,每轮返回它,下一轮接着用
- 分类键可由 item => item.key 动态生成,支持字符串、数字甚至函数返回值
- 避免直接修改原对象,推荐用展开语法或 Map.set() 保证清晰性
按单个字段分组(最常见场景)
比如把商品列表按 category 分组:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const products = [
{ name: 'iPhone', category: 'phone' },
{ name: 'MacBook', category: 'laptop' },
{ name: 'iPad', category: 'tablet' },
{ name: 'AirPods', category: 'phone' }
];
const grouped = products.reduce((acc, item) => {
const key = item.category;
if (!acc[key]) acc[key] = [];
acc[key].push(item);
return acc;
}, {});
// 结果:{ phone: [...], laptop: [...], tablet: [...] }
用 Object.fromEntries + Map 实现更健壮的分组
用 Map 避免原型污染和 key 类型限制(比如 key 是对象或 Symbol),再转成普通对象:
const groupedMap = products.reduce((map, item) => {
const key = item.category;
const list = map.get(key) || [];
map.set(key, [...list, item]);
return map;
}, new Map());
const result = Object.fromEntries(groupedMap);
多级分组或嵌套条件分组
例如先按 category,再按 price 区间(
const grouped = products.reduce((acc, item) => {
const cat = item.category;
const priceLevel = item.price
<p>也可以构造嵌套对象:acc[cat] = acc[cat] || {}; acc[cat][priceLevel] = ...,适合需要结构化访问的场景。</p>
<p>不复杂但容易忽略:记得初始化 acc,别漏 return;key 要确保稳定(避免 undefined 或空字符串导致全归一类);需要去重或合并时,在 push 前加判断即可。</p>大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










