到目前为止你所尝试的有两个问题
第一个是严重的:
你忘了从你的累加函数返回,所以它返回undefined。
它第二次抛出,因为Array.prototype.reduce 在第一次调用累加函数时将指定的种子作为第一个参数传递,但在第二次调用时,它传递了第一次调用的结果。
所以最初,reduce 像这样调用你的函数
result = accumulatorFunction(seed, arr[0], 0, arr);
扩展为
result = accumulatorFunction({}, 1, 0, [1, 2, 3]);
然而,随后的调用看起来像这样
result = accumulatorFunction(result, arr[1], 1 arr);
扩展为
result = accumulatorFunction(undefined, 2, 1, [1, 2, 3]);
所以你需要写类似的东西
arr.reduce((acc, curr, i, arr) => {
acc[curr] = arr[i];
return acc;
}, {});
您的代码的另一个问题,更多是样式问题,是您不必要地提供和使用传递给累加函数的第四个参数。无论如何,这个参数只是数组本身。使用它很麻烦,并且会使您的代码更复杂、更容易出错并且更难理解。
改为写
arr.reduce((acc, curr) => {
acc[curr] = curr;
return acc;
}, {});
"use strict";
const input = [1, 2, 3];
const output = input.reduce((acc, curr) => {
acc[curr] = curr;
return acc;
}, {});
console.log(output);