js实现分组

在 JavaScript 中实现分组操作可以通过多种方式完成,以下是几种常见方法:

使用 reduce 方法
const data = [
{ category: 'A', value: 1 },
{ category: 'B', value: 2 },
{ category: 'A', value: 3 }
];
const grouped = data.reduce((acc, item) => {
const key = item.category;
if (!acc[key]) acc[key] = [];
acc[key].push(item);
return acc;
}, {});
使用 Map 数据结构
const map = new Map();
data.forEach(item => {
const key = item.category;
if (!map.has(key)) map.set(key, []);
map.get(key).push(item);
});
const grouped = Object.fromEntries(map);
使用 lodash 库的 groupBy
const _ = require('lodash');
const grouped = _.groupBy(data, 'category');
按条件分组
const grouped = data.reduce((acc, item) => {
const key = item.value > 2 ? 'high' : 'low';
if (!acc[key]) acc[key] = [];
acc[key].push(item);
return acc;
}, {});
多级分组
const multiGrouped = data.reduce((acc, item) => {
const categoryKey = item.category;
const valueKey = item.value > 2 ? 'high' : 'low';
if (!acc[categoryKey]) acc[categoryKey] = {};
if (!acc[categoryKey][valueKey]) acc[categoryKey][valueKey] = [];
acc[categoryKey][valueKey].push(item);
return acc;
}, {});
每种方法适用于不同场景:
reduce适合原生实现Map适合需要保持插入顺序的情况lodash适合已有该库的项目- 条件分组和多级分组适合复杂逻辑
选择时需考虑浏览器兼容性、性能需求和代码可读性。






