JS中在Reduce函数内修改累加器对象是否为通用实践?
关于reduce分组时修改累加器对象的写法是否属于通用实践
你贴的这段用reduce实现按关键字段分组的代码,完全属于前端开发里的通用实践,而且是非常常见的写法。
- 首先,reduce的设计本身就支持这种「在累加器上修改并返回」的模式,尤其当累加器是对象、数组这类引用类型时,这么做的性能更优——不需要每次迭代都创建新的对象/数组,能减少不必要的内存开销。
- 对比你说的用外部空数组存结果的写法,这种把状态管理封装在reduce回调内部的方式,代码更紧凑、内聚性更强,不需要额外暴露外部变量,符合函数式编程的简洁思路。
- 包括Lodash在内的很多成熟工具库,它们的
groupBy方法底层实现逻辑也和这段代码类似,都是通过直接操作累加器对象来完成分组。
当然,如果是在要求完全不可变性的场景(比如React的状态更新),你可以选择每次迭代返回新对象,但这种写法会带来额外性能损耗。对于普通的分组需求,修改原有累加器的写法完全没问题,是行业内普遍认可的实现方式。
function groupBy(array, key) { return array.reduce((result, currentItem) => { const groupByKey = currentItem[key]; // Create a new array for the key if it doesn't exist in the result if (!result[groupByKey]) { result[groupByKey] = []; } // Push the current item to the array of the corresponding key result[groupByKey].push(currentItem); return result; }, {}); } // Example usage: const data = [ { id: 1, category: 'A' }, { id: 2, category: 'B' }, { id: 3, category: 'A' }, { id: 4, category: 'C' }, { id: 5, category: 'B' }, ];
内容的提问来源于stack exchange,提问作者engineer-x
相关产品推荐
相关产品推荐

