JavaScript访问嵌套JSON对象内层firstName等字段的问题
问题根源
你的嵌套属性访问顺序存在逻辑错误:rowNum是外层循环遍历class.seating拿到的行名字符串,值为"FirstRow"、"SecondRow"这类格式。你写的rowNum[index]本质是读取字符串的第index位字符,比如index为0时返回的是"F",class.seating下不存在名为"F"的属性,因此访问结果为undefined,再读取firstName属性就会抛出对应报错。
正确实现代码
将属性访问的层级顺序调整即可,修正后的循环逻辑如下:
// 建议把变量名从class改成selectedClass,class是JS保留关键字,避免潜在报错 let selectedClass = classes[classesAvailable.value]; for(rowNum in selectedClass.seating){ // 先拿到当前行对应的所有学生集合 const currentRow = selectedClass.seating[rowNum]; for(index in currentRow){ console.log(index); // 直接从当前行集合中读取对应索引的学生信息 console.log(currentRow[index].firstName); console.log(currentRow[index].collegeMajor); } }
可选优化
遍历对象属性时可增加自有属性判断,避免读取到原型链上的异常属性:
for(rowNum in selectedClass.seating){ if(!selectedClass.seating.hasOwnProperty(rowNum)) continue; const currentRow = selectedClass.seating[rowNum]; for(index in currentRow){ if(!currentRow.hasOwnProperty(index)) continue; console.log(currentRow[index].firstName, currentRow[index].collegeMajor); } }
内容的提问来源于stack exchange,提问作者Nicepeach
相关产品推荐
相关产品推荐

