![](/img/trans.png)
[英]JS Array.reduce : Encountering “Uncaught TypeError: Cannot read property […] of undefined”
[英]JS reduce: TypeError: Cannot create property at Array.reduce
我有以下内容:
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
我究竟做错了什么?
如果你想使用 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);
您需要按照要求返回 object。 在您的代码中,您将返回分配的值
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);
return acc[key]=vals[i];
实际上返回vals[i]
==> 你最终只能在https://playcode.io/环境中获得h
的值。
更新:在您的环境中,您收到该错误是因为:
keys.reduce
之后,您的下一个acc
将是"1"
(返回acc[key]= vals[0]}
等于返回vals[0]
,即"1"
)keys.reduce
,你的 acc 是"1"
然后你设置acc[key]= vals[1]}
等于"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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.