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

使用箭头函数将数组归约为对象的实现问题

解决Reduce箭头函数中赋值后返回对象的问题

嘿,这个问题我之前也碰到过!核心原因是赋值表达式的返回值是被赋的值——也就是你这里的month,所以reduce的回调每次都把month当成了新的累积器,自然达不到你想要的把所有月份按Id存入对象的结果。

要在一条语句里同时完成赋值并返回目标对象,你可以用JavaScript的逗号运算符,它会依次执行多个表达式,最终返回最后一个表达式的结果,刚好能满足你的需求:

const monthsById = yourMonthArray.reduce((result, month) => 
  // 先执行赋值操作,再返回result对象
  (result[month.Id] = month, result), 
{}); // 初始累积器为空白对象

原理说明:

  • 逗号运算符会先执行result[month.Id] = month完成键值对的赋值
  • 随后返回逗号后方的result,让reduce把这个对象作为下一次迭代的累积器
  • 全程只操作同一个初始空对象,性能比每次创建新对象(比如用对象展开语法)要高效得多

如果你想写法更直观(虽然多了几行),也可以用大括号包裹并显式return:

const monthsById = yourMonthArray.reduce((result, month) => {
  result[month.Id] = month;
  return result;
}, {});

不过既然你想要一条语句的简洁写法,逗号运算符的方案完全符合要求,还能保持箭头函数的紧凑风格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:49:47