3 回答
TA贡献1891条经验 获得超3个赞
reduce 回调需要return像您一样表达的if。在您的场景中,reduce 回调不会返回任何内容,因为obj已分配但从未返回,因此acc在第二次迭代中未定义并obj在每个循环中分配,导致最后一个元素arr传播到对象。
如果你想在一行中做到这一点,你也可以避免分配 to obj,只需按预期使用 reduce ,逐渐扩展到一个全新的对象。返回的值reduce将分配给obj。
const arr = ['1' , '4' , '3' , '5' , '3'];
let obj = arr.reduce((acc, val) => ({...acc, [val]: val}), {});
// ^--- initial value
console.log(obj);
TA贡献1788条经验 获得超4个赞
您需要从减少函数中返回累加器的新值
const arr = ['1' , '4' , '3' , '5' , '3'];
const obj = arr.reduce((acc ,val) => {
return {...acc , [val]:val};
},{});
console.log(obj);
您可以通过返回括在括号中的对象字面量来进一步缩短它。请参阅返回对象文字
const arr = ['1' , '4' , '3' , '5' , '3'];
const obj = arr.reduce((acc ,val) => ({...acc , [val]:val}), {});
console.log(obj);
TA贡献1946条经验 获得超4个赞
那是因为你没有从 reduce 中返回 balue
const arr = ['1' , '4' , '3' , '5' , '3'];
let obj = arr.reduce((acc ,val) => {
const obj = {...acc , [val]:val};
return obj;
},{});
console.log(obj)
或简化
const arr = ['1', '4', '3', '5', '3'];
const obj = arr.reduce((acc, val) => ({ ...acc,[val]: val}), {});
console.log(obj)
添加回答
举报