You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 23:24:59