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

使用Array.reduce将数组转为对象报错,求问题排查与解决方法

问题分析与修复方案

嘿,我来帮你揪出代码里的问题!你的思路是对的——用reduce来把数组转成键值对相同的对象,但问题出在**reduce的回调函数没有返回累加器acc**。

为什么会报错?

reduce的工作逻辑是:每次迭代都会把回调函数的返回值作为下一次迭代的累加器。你的代码里,回调函数只做了acc[curr] = arr[i]这一步,没有返回acc,所以第一次迭代后,累加器就变成了undefined。到第二次迭代时,你尝试给undefined[curr]赋值,自然就会抛出错误啦。

另外还有个小冗余:curr本身就是当前迭代的数组元素,和arr[i]是同一个值,所以没必要写arr[i],直接用curr就行~

修复后的代码

const arrToObj = (arr) => {
  return arr.reduce((acc, curr) => {
    acc[curr] = curr;
    return acc; // 关键:返回更新后的累加器
  }, {});
};

console.log(arrToObj([1,2,3,4,5,6,7,8,9]));
// 输出:{1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9}

或者用更简洁的箭头函数隐式返回写法:

const arrToObj = (arr) => arr.reduce((acc, curr) => ({ ...acc, [curr]: curr }), {});

这种写法利用对象展开语法,每次返回一个新的对象,同样能达到效果,不过如果数组很大的话,第一种写法的性能会更好一些,因为它是在同一个累加器对象上直接更新的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:37:28