所以,长话短说,我有一个包含科目和学生成绩的对象。我的工作是: 1. 计算每个科目的平均值。 2. 将所有平均值相加; 3. 计算所有科目的总平均值。
这是我的代码:
const grades = {
algebra: [2,3,5,2,4,3],
geometry: [2,4,5],
signing: [3,3,4,5],
physics: [5,5],
music: [2,2,5],
english: [4,4,3],
poetry: [5,3,4],
chemistry: [2],
french: [4,4]
}
function getAverageScore(data) {
for (let subject in data) {
let grades = data[subject];
let average = grades.reduce((acc,curr) => {
return acc + curr / grades.length;
}, 0)
出于某种奇怪的原因,这不起作用,但是,当我 console.log (grades.length) 时,它显示带有成绩的数组的长度。我究竟做错了什么?另外,如何对生成的对象中的所有平均成绩求和?有什么建议吗?
最佳答案
解决方案如下:
function getAverageScore(data) {
const listOfSubjects = Object.keys(data);
let averagePerSubject = {};
let sumOfAllAverages = listOfSubjects.reduce((sumOfAllAverages, subject) => {
let grades = data[subject];
let average = grades.reduce((acc,curr) => (acc + curr), 0) / grades.length;
averagePerSubject[subject] = average;
return sumOfAllAverages + average;
}, 0);
let averageOfAllSubjects = sumOfAllAverages / listOfSubjects.length;
return { averagePerSubject, sumOfAllAverages, averageOfAllSubjects };
}
但实现显示的是所有受试者的平均值,而不是加权平均值。
关于javascript - 无法在对象上使用reduce 获得平均成绩(JavaScript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58682105/