javascript - 在reduce函数之后返回一个对象
问题描述
我试图结合使用 reduce 和扩展运算符来练习。我有一个想要转换为对象的数组。我试过这样做,但我的 reduce 函数只返回数组的最后一个值。我希望这个 reducer 函数能够添加到数组中。
我的尝试:
const arr = ['1' , '4' , '3' , '5' , '3'];
let obj;
arr.reduce((acc ,val) => {
obj = {...acc , [val]:val};
},{});
console.log(obj)
为什么我只得到最后一个值?而不是整个数组到一个对象?
解决方案
reduce 回调需要一个return
if 像你所做的那样表达。在您的场景中, 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);
推荐阅读
- html - 如何将背景大小应用于背景颜色?
- typescript - 打字稿可以在运行时检索幻像类型参数吗?
- amazon-product-api - 获取 Amazon SP-API 的错误“访问请求的资源被拒绝”需要帮助验证凭证
- python - 如何使用 Python 更改 Active Directory 用户显示名称
- perl - 如何从 Imager::Color 对象中获取颜色十六进制值?
- html - 离子段值检查所有
- powershell - 使用 PowerShell 获取用户的数据审计日志报告(Power bi pro)
- reactjs - 如何创建句柄 DeepLink?接收链接并打开特定页面
- kubernetes - Kubernetes 上的 Telegraf:错误:服务“telegraf”无效:spec.ports:必需值
- javascript - 如何在这种情况下添加额外的查询参数(JS/Angular.js)