如何编程式为对象添加元素且无需硬编码键?代码报错解决
解决JavaScript动态给对象添加属性的错误问题
嘿,我来帮你搞定这个问题!你遇到的Uncaught TypeError: Cannot set property '0' of undefined错误,根源是你对对象属性的访问方式搞错了,咱们一步步理清楚:
错误原因分析
你写的myObject.list[index],本质是在尝试给myObject里名为list的属性(一个数组)的第index项赋值,但一开始myObject是空对象,根本不存在list这个属性,所以myObject.list的值是undefined,自然没法给undefined的0属性赋值,这就触发了报错。
你真正想要的是把list数组里的元素(比如'seeds')作为myObject的键,对应list2里的元素作为值,这时候得用方括号语法来访问对象属性。
正确代码示例
方法1:使用forEach循环
let myObject = {}; let list = ['seeds','leaves','branches']; let list2 = ['100','1 million','22']; list2.forEach((item, index) => { // 用list[index]的结果作为对象的键 myObject[list[index]] = item; }); console.log(myObject); // 输出:{ seeds: '100', leaves: '1 million', branches: '22' }
方法2:使用for循环
let myObject = {}; let list = ['seeds','leaves','branches']; let list2 = ['100','1 million','22']; // 注意要声明变量i,避免全局污染 for(let i = 0; i < list.length; i++){ myObject[list[i]] = list2[i]; } console.log(myObject); // 同样得到期望的对象
额外小提示
如果list和list2的长度不一致,你可以加个判断避免给键赋值undefined,比如:
for(let i = 0; i < list.length; i++){ if(list2[i] !== undefined){ myObject[list[i]] = list2[i]; } }
内容的提问来源于stack exchange,提问作者xaander1
相关产品推荐
相关产品推荐

