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

如何实现函数计算数组内对象的数组属性平均值并正确传参?

问题解决步骤

你的代码存在几个关键问题:

  • 变量声明顺序错误:students 数组先于三个学生对象声明,此时 randy、riziq、rama 还未被定义,会导致数组元素为 undefined,甚至触发暂时性死区报错。
  • 函数未正确接收参数:average 函数没有定义形参来接收传入的学生数组。
  • 缺少平均分计算逻辑:函数内部未实现遍历学生、计算每个学生分数平均值的逻辑。

修正后的完整代码

// 先定义学生对象,再创建数组
let randy = {
  name: 'Randy',
  score: [75, 80, 90]
};
let riziq = {
    name: 'Riziq',
    score: [50, 90, 90]
};
let rama = {
    name: 'Rama',
    score: [80, 75, 90]
};

let students = [randy, riziq, rama];

function average(studentsArr) {
    // 遍历每个学生,计算平均分并返回结果数组
    return studentsArr.map(student => {
        // 用reduce计算总分,除以分数数量得到平均分
        const totalScore = student.score.reduce((sum, score) => sum + score, 0);
        const avg = totalScore / student.score.length;
        // 返回格式化后的字符串,也可以返回对象
        return `${student.name} 的平均分:${avg.toFixed(2)}`;
    });
};

// 调用函数并传入students数组,遍历输出结果
average(students).forEach(result => console.log(result));

代码说明

  1. 调整变量顺序:确保学生对象先被定义,再放入 students 数组,避免引用未定义的变量。
  2. 函数参数定义:average 函数添加 studentsArr 形参,接收传入的学生数组。
  3. 计算逻辑实现:
    • 使用 array.map() 遍历每个学生对象,返回包含平均分的结果。
    • 用 array.reduce() 累加分数总和,初始值设为0避免空数组报错。
    • 用 toFixed(2) 保留两位小数,让结果更直观。
  4. 调用函数:传入 students 数组,遍历输出每个学生的平均分结果。

如果需要返回对象格式(方便后续处理),可以修改map的返回值:

return {
    name: student.name,
    averageScore: avg.toFixed(2)
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:40:27