javascript - 无法在对象上使用reduce 获得平均成绩(JavaScript)

标签 javascript object reduce

所以,长话短说,我有一个包含科目和学生成绩的对象。我的工作是: 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/

相关文章:

javascript - 如何最好地搜索 Javascript 数组以进行部分匹配?

java - 调用任意数量的对象实例

java - 字段的 get(Object obj) 不适用于实例变量

javascript - Reduce() 一个已经被减少的元素的对象

javascript - 用不同标签的对象中的数组汇总数组

javascript - 无法在程序启动时获取隐藏选项

javascript - orderby 和 track by $index 在 AngularJS 中不起作用

javascript - 在jsTree中,我们如何在替换树后初始选择节点?

java - 当对象是数组的一部分时直接访问对象的属性

hadoop - Hadoop-2.4.1自定义分区程序以平衡 reducer