js实现分组函数
分组函数实现方法
在JavaScript中,分组函数通常指将数组元素按照特定条件分组。以下是几种常见的实现方式:

使用reduce方法实现分组
function groupBy(arr, key) {
return arr.reduce((acc, obj) => {
const groupKey = typeof key === 'function' ? key(obj) : obj[key];
(acc[groupKey] = acc[groupKey] || []).push(obj);
return acc;
}, {});
}
// 示例用法
const data = [
{id: 1, category: 'A'},
{id: 2, category: 'B'},
{id: 3, category: 'A'}
];
const grouped = groupBy(data, 'category');
// 结果: {A: [{...}, {...}], B: [{...}]}
使用Map实现高效分组
function groupByMap(arr, keyExtractor) {
const map = new Map();
arr.forEach(item => {
const key = keyExtractor(item);
if (!map.has(key)) {
map.set(key, []);
}
map.get(key).push(item);
});
return Object.fromEntries(map);
}
按多个条件分组
function groupByMultiple(arr, keys) {
return arr.reduce((groups, item) => {
const groupKey = keys.map(k => item[k]).join('|');
(groups[groupKey] = groups[groupKey] || []).push(item);
return groups;
}, {});
}
使用Lodash库的groupBy
如果项目中使用Lodash,可以直接使用其groupBy方法:
const _ = require('lodash');
const grouped = _.groupBy(data, 'category');
性能优化版本
对于大型数据集,可以考虑以下优化版本:
function optimizedGroupBy(array, key) {
const result = Object.create(null);
for (const item of array) {
const groupKey = item[key];
let group = result[groupKey];
if (group) {
group.push(item);
} else {
result[groupKey] = [item];
}
}
return result;
}
选择哪种实现方式取决于具体需求、数据规模和性能要求。原生reduce方法在大多数情况下表现良好,而Map版本在处理复杂键时更高效。







