如何不直接调用对象Key名,动态访问对象的属性值
问题原因
- 变量名大小写拼写不匹配:代码中定义键名数组时使用的变量名是
PersonsArr,后续取值时写为小写开头的personsArr,JavaScript 对大小写敏感,该笔误会先触发变量未定义的异常。 - 动态键访问语法错误:点操作符
.只能访问对象的静态字面量键,你将键名存入Viktor变量后,obj.Viktor是尝试访问对象上名为Viktor的键,而非读取Viktor变量的值作为键名。要使用动态变量作为键访问对象属性,必须使用方括号语法obj[变量名]。
修正后的实现代码
const obj = { viktor: ['apple', 'grape', 'orange', 'apple', 'banana'], kate: ['grape', 'orange', 'apple', 'grape', 'banana'], }; // 统一变量名大小写 const personsArr = Object.keys(obj); const viktorKey = personsArr[0]; // 用方括号语法访问动态键 console.log(obj[viktorKey]); // 输出:['apple', 'grape', 'orange', 'apple', 'banana']
批量遍历所有人员数组的实现(无需写死键名)
如果要逐一访问所有人员对应的数组,可以直接遍历Object.values,不需要手动取索引:
const obj = { viktor: ['apple', 'grape', 'orange', 'apple', 'banana'], kate: ['grape', 'orange', 'apple', 'grape', 'banana'], }; // 直接遍历所有值,无需显式调用键名 for (const fruitArr of Object.values(obj)) { console.log(fruitArr); } // 依次输出viktor的数组、kate的数组
如果需要同时拿到键名和对应的数组,可以用Object.entries:
for (const [personName, fruitArr] of Object.entries(obj)) { console.log(`${personName}的水果数组:`, fruitArr); }
内容的提问来源于stack exchange,提问作者Александр Ястребов
相关产品推荐
相关产品推荐

