JavaScript中获取学生成绩总和时grade显示undefined的问题及优化
问题分析与解决
一、grade显示undefined的原因
你的代码里student1、student2、student3都是数组类型(用[]包裹),而非直接的对象。数组本身没有grade属性,你要访问的是数组内第一个元素的grade,直接写classroom.student1.grade自然会返回undefined。
二、快速修正方法
改成数组下标访问第一个元素即可:
function getGrades() { const grades = classroom.student1[0].grade + classroom.student2[0].grade + classroom.student3[0].grade console.log(grades) // 输出24 }
三、更简便的成绩求和方案
当前用student1、student2这种单独命名的方式扩展性极差,新增学生时必须手动修改求和代码。建议把所有学生统一放到一个数组中,后续维护和计算都会更高效:
重构后的classroom对象
let classroom = { numberOfChairs: 20, numberofTables: 10, // 所有学生存入一个数组 students: [ {fullName: "", age: "", grade:8, electronics: {brand:"", model:"", batteryCapacity:""}}, {fullName: "", age: "", grade:8, electronics: {brand:"", model:"", batteryCapacity:""}}, {fullName: "", age: "", grade:8, electronics: {brand:"", model:"", batteryCapacity:""}} ], teachers: [{fullName:"", yearsOfExperience:"", salary:""}] };
两种高效求和方式
- reduce累加(推荐)
利用数组的reduce方法直接完成聚合计算:
function getTotalGrades() { const total = classroom.students.reduce((sum, student) => sum + student.grade, 0); console.log(total); // 输出24 } getTotalGrades();
- forEach遍历累加
如果对reduce不熟悉,用forEach循环实现更直观:
function getTotalGrades() { let total = 0; classroom.students.forEach(student => { total += student.grade; }); console.log(total); // 输出24 } getTotalGrades();
后续新增学生时,只要往students数组里添加对象,求和代码完全不用改动,扩展性拉满。
内容的提问来源于stack exchange,提问作者Tange007
相关产品推荐
相关产品推荐

