JS reduce: TypeError: Cannot create property at

我有以下内容:


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

我究竟做错了什么?


慕仙森
浏览 138回答 3
3回答

慕尼黑的夜晚无繁华

如果你想使用 reduce 方法,那很好,但你必须返回累加器才能使其工作。let keys = ['a', 'b', 'c'];let vals = ['1', 'b', 'h'];const my_obj = keys.reduce(function(acc, key, i) {&nbsp; acc[key] = vals[i];&nbsp; 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++)&nbsp; my_obj[keys[i]] = vals[i];console.log(my_obj);

qq_遁去的一_1

您需要将对象作为 acc 返回。在您的代码中,您将返回分配的值let keys = ['a', 'b', 'c'];let vals = ['1', 'b', 'h'];const my_obj = keys.reduce(function(acc, key, i) {&nbsp; acc[key] = vals[i];&nbsp; return acc;}, {});console.log(my_obj);

翻阅古今

return acc[key]=vals[i];实际上返回vals[i]==> 的值,您最终h只能在https://playcode.io/环境中获得。更新:在您的环境中,您收到该错误是因为:keys.reduce在你的下一个第一次运行之后acc("1"返回acc[key]= vals[0]}&nbsp;相等的返回vals[0]是"1")现在你来到第二轮keys.reduce,你的 acc 就是"1"你设置 的acc[key]= vals[1]}equal&nbsp;"1"[b] = vals[1]&nbsp;==> 你得到了那个错误尝试这个:let keys = ['a','b','c'];let vals = ['1','b','h'];const my_obj = keys.reduce(function(acc,key,i) {// return new expanded accreturn ({...acc, [key]: vals[i]})},{});console.log(my_obj);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript