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

如何在JavaScript的reduce回调中一行设置对象属性并返回对象?

如何合并reduce回调中的两行代码

你可以通过逗号运算符把赋值和返回操作合并成一行,结合箭头函数的简洁语法实现,完全保留原代码的逻辑:

const arr = [{name: 'fred', age: 20}, {name: 'john', age: 50}]

const result = arr.reduce((acc, item) => (acc[item.name] = item.age, acc), {})

console.log(result) // 输出:{ fred: 20, john: 50 }

为什么这样可行?

  • 逗号运算符会按顺序执行所有表达式,最终返回最后一个表达式的结果
  • 用括号包裹整个表达式,是为了让箭头函数将其识别为返回值(如果不加括号,箭头函数会把逗号前的内容当成函数体语句,无法正确返回acc)

如果需要保持不可变操作(不直接修改累加器对象),也可以用Object.assign或对象展开语法实现一行写法,但这两种方式会每次创建新对象,和原代码修改原累加器的行为不同:

用Object.assign的写法:

const result = arr.reduce((acc, item) => Object.assign(acc, { [item.name]: item.age }), {})

用ES6对象展开的写法:

const result = arr.reduce((acc, item) => ({ ...acc, [item.name]: item.age }), {})

内容的提问来源于stack exchange,提问作者danday74

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:19:55