首页 > 解决方案 > 在reduce函数之后返回一个对象

问题描述

我试图结合使用 reduce 和扩展运算符来练习。我有一个想要转换为对象的数组。我试过这样做,但我的 reduce 函数只返回数组的最后一个值。我希望这个 reducer 函数能够添加到数组中。

我的尝试:

const arr = ['1' , '4' , '3' , '5' , '3'];

let obj;
arr.reduce((acc ,val) => {
    obj = {...acc , [val]:val};
},{});

console.log(obj)

为什么我只得到最后一个值?而不是整个数组到一个对象?

标签: javascript

解决方案


reduce 回调需要一个returnif 像你所做的那样表达。在您的场景中, reduce 回调没有返回任何内容,因为obj已分配但从未返回,因此acc在第二次迭代中未定义并obj在每个循环中分配,导致arr传播到对象的最后一个元素。

如果您想在一行中执行此操作,您还可以obj通过按预期使用 reduce 来避免分配 to ,方法是逐步扩展到一个全新的对象。的返回值reduce将分配给obj

const arr = ['1' , '4' , '3' , '5' , '3'];

let obj = arr.reduce((acc, val) => ({...acc, [val]: val}), {});
//                                                         ^--- initial value
console.log(obj);


推荐阅读