为了账号安全,请及时绑定邮箱和手机立即绑定

JS reduce: TypeError: Cannot create property at

JS reduce: TypeError: Cannot create property at

慕仙森 2022-10-13 10:39:32
我有以下内容:let keys = ['a','b','c'];let vals = ['1','b','h'];const my_obj = keys.reduce(function(acc,key,i) {return acc[key]=vals[i];},{});logger.log(my_obj);我想my_obj成为{a:1,b:b,c:h}。我越来越:TypeError: Cannot create property 'b' on string '1'at Array.reduce我究竟做错了什么?
查看完整描述

3 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

如果你想使用 reduce 方法,那很好,但你必须返回累加器才能使其工作。


let keys = ['a', 'b', 'c'];

let vals = ['1', 'b', 'h'];

const my_obj = keys.reduce(function(acc, key, i) {

  acc[key] = vals[i];

  return acc;

}, {});


console.log(my_obj);


但我会建议使用简单的 for 循环,因为问题很简单


let keys = ['a', 'b', 'c'];

let vals = ['1', 'b', 'h'];

let my_obj = {};

for (let i = 0; i < keys.length; i++)

  my_obj[keys[i]] = vals[i];


console.log(my_obj);


查看完整回答
反对 回复 2022-10-13
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

您需要将对象作为 acc 返回。在您的代码中,您将返回分配的值


let keys = ['a', 'b', 'c'];

let vals = ['1', 'b', 'h'];

const my_obj = keys.reduce(function(acc, key, i) {

  acc[key] = vals[i];

  return acc;

}, {});


console.log(my_obj);


查看完整回答
反对 回复 2022-10-13
?
翻阅古今

TA贡献1780条经验 获得超5个赞

return acc[key]=vals[i];实际上返回vals[i]==> 的值,您最终h只能在https://playcode.io/环境中获得。

更新:在您的环境中,您收到该错误是因为:

  • keys.reduce在你的下一个第一次运行之后acc"1"返回acc[key]= vals[0]} 相等的返回vals[0]"1"

  • 现在你来到第二轮keys.reduce,你的 acc 就是"1"你设置 的acc[key]= vals[1]}equal "1"[b] = vals[1] ==> 你得到了那个错误

尝试这个:

let keys = ['a','b','c'];

let vals = ['1','b','h'];


const my_obj = keys.reduce(function(acc,key,i) {

// return new expanded acc

return ({...acc, [key]: vals[i]})

},{});


console.log(my_obj);


查看完整回答
反对 回复 2022-10-13
  • 3 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信