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

如何在JavaScript构造函数中使用数组并计算学生成绩平均值

解决JavaScript学生对象构造函数的成绩数组与平均值计算问题

嘿,我来帮你搞定这个问题!你之前的代码里有个核心小疏漏——把this.grades直接赋值成了空数组[],这就完全忽略了传入的grades参数啦~下面给你两种靠谱的实现方式,涵盖传统构造函数和现代ES6类写法:

方法一:传统构造函数写法

function Student(name, surname, number, grades) {
  // 绑定基本属性
  this.name = name;
  this.surname = surname;
  this.number = number;
  
  // 处理成绩数组:优先用传入的数组,容错处理非数组输入
  this.grades = Array.isArray(grades) ? [...grades] : [];
  
  // 定义计算平均值的方法
  this.getAverage = function() {
    // 没有成绩时返回0,避免除以0报错
    if (this.grades.length === 0) return 0;
    // 用reduce快速求和
    const totalScore = this.grades.reduce((sum, grade) => sum + grade, 0);
    // 返回平均值,可根据需求保留小数
    return totalScore / this.grades.length;
  };
}

关键细节说明:

  • 用Array.isArray(grades)做容错判断:如果传入的不是数组(比如误传了单个数字或字符串),就用空数组兜底,避免后续计算报错。
  • 用[...grades]创建数组副本:这样外部修改原始传入的数组时,不会影响实例内部的成绩数据,保证数据独立性。

方法二:ES6类写法(更简洁易读)

现在很多项目都用ES6类来写面向对象代码,逻辑更清晰:

class Student {
  constructor(name, surname, number, grades) {
    this.name = name;
    this.surname = surname;
    this.number = number;
    // 同样做数组容错和拷贝
    this.grades = Array.isArray(grades) ? [...grades] : [];
  }
  
  // 把计算平均值的方法定义在类的原型上(更节省内存)
  getAverage() {
    if (this.grades.length === 0) return 0;
    const totalScore = this.grades.reduce((sum, grade) => sum + grade, 0);
    return totalScore / this.grades.length;
  }
}

使用示例

不管用哪种写法,使用方式都一样:

// 创建学生实例
const alice = new Student("Alice", "Smith", "S456", [90, 88, 95, 82]);
// 访问属性
console.log(alice.name); // 输出:Alice
console.log(alice.grades); // 输出:[90, 88, 95, 82]
// 计算平均值
console.log(alice.getAverage()); // 输出:88.75

这样就能完美实现你想要的功能啦——正确接收成绩数组,并且能计算平均值~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:34:39