如何实现函数计算数组内对象的数组属性平均值并正确传参?
问题解决步骤
你的代码存在几个关键问题:
- 变量声明顺序错误:
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));
代码说明
- 调整变量顺序:确保学生对象先被定义,再放入
students数组,避免引用未定义的变量。 - 函数参数定义:
average函数添加studentsArr形参,接收传入的学生数组。 - 计算逻辑实现:
- 使用
array.map()遍历每个学生对象,返回包含平均分的结果。 - 用
array.reduce()累加分数总和,初始值设为0避免空数组报错。 - 用
toFixed(2)保留两位小数,让结果更直观。
- 使用
- 调用函数:传入
students数组,遍历输出每个学生的平均分结果。
如果需要返回对象格式(方便后续处理),可以修改map的返回值:
return { name: student.name, averageScore: avg.toFixed(2) };
内容的提问来源于stack exchange,提问作者JCC288
相关产品推荐
相关产品推荐

