You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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:""}]
};

两种高效求和方式

  1. reduce累加(推荐)
    利用数组的reduce方法直接完成聚合计算:
function getTotalGrades() {
    const total = classroom.students.reduce((sum, student) => sum + student.grade, 0);
    console.log(total); // 输出24
}
getTotalGrades();
  1. forEach遍历累加
    如果对reduce不熟悉,用forEach循环实现更直观:
function getTotalGrades() {
    let total = 0;
    classroom.students.forEach(student => {
        total += student.grade;
    });
    console.log(total); // 输出24
}
getTotalGrades();

后续新增学生时,只要往students数组里添加对象,求和代码完全不用改动,扩展性拉满。

内容的提问来源于stack exchange,提问作者Tange007

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 04:46:12