如何从考试提交对象数组计算学生平均成绩并按指定顺序排序?
解决方法
实现思路
- 先统计每位学生的总成绩与考试次数
- 按指定的学生顺序(Freddy→Jose→Daniel)计算平均分,生成目标数组
代码实现
const submissions = [ { name: 'Freddy', grade: 10, date: '20/07/2022' }, { name: 'Jose', grade: 8, date:'20/07/2022' }, { name: 'Freddy', grade: 8, date: '25/07/2022' }, { name: 'Daniel', grade: 5, date: '21/07/2022' }, { name: 'Jose', grade: 5, date: '22/07/22' } ]; // 1. 统计每位学生的总成绩和考试次数 const gradeStats = submissions.reduce((acc, curr) => { if (!acc[curr.name]) { acc[curr.name] = { total: 0, count: 0 }; } acc[curr.name].total += curr.grade; acc[curr.name].count += 1; return acc; }, {}); // 2. 按指定顺序计算平均分并生成结果数组 const targetOrder = ['Freddy', 'Jose', 'Daniel']; const averageGrades = targetOrder.map(name => gradeStats[name].total / gradeStats[name].count); console.log(averageGrades); // 输出结果: [9, 6.5, 5]
代码说明
- 统计阶段:使用
reduce遍历原始数组,为每个学生创建统计对象,累加其总成绩和考试次数。 - 结果生成阶段:按照要求的固定顺序遍历学生名单,用统计得到的总成绩除以考试次数,直接生成符合Chart.js需求的简单数组。
内容的提问来源于stack exchange,提问作者sc0ria
相关产品推荐
相关产品推荐

