首页 > 解决方案 > 在数组数组上运行函数 - js

问题描述

我试图为三个学生(存储在数组数组中)取 3 个成绩的平均值,然后通过带有 else if 语句的函数运行这些平均值,以检查平均成绩是否分别是 A、B 或 C。

我宁愿不必为每个学生的平均值创建一个单独的函数 else if(所以我知道如何将其扩展到 3 个以上的输入),并且我不确定如何在函数中索引 averageGrades 数组这样我就可以控制台记录 averageGrades 数组的每个元素(学生),并让 else if 语句评估该特定元素(学生)。

我还尝试为每个学生创建一个 averageGrade 变量,以便 averageGrades 数组具有单个值而不是完整的方程,但遇到了同样的问题。

var studentGrades = [
  [80, 90, 94],
  [80, 90, 94],
  [80, 90, 94]
]
var studentAvgerages = [
  (studentGrades[0][0] + studentGrades[0][1] + studentGrades[0][2]) / 3,
  (studentGrades[1][0] + studentGrades[1][1] + studentGrades[1][2]) / 3,
  (studentGrades[2][0] + studentGrades[2][1] + studentGrades[2][2]) / 3
]
for (var i = 0; i <= studentAvgerages.length; i++) {
  function evalGrades(studentAvgerages[i]) {
    if (studentAvgerages[i] >= 90) {
      return "A"
    } else if ((studentAvgerages[i] >= 80) && (studentAvgerages[i] < 90)) {
      return "B"
    } else if ((studentAvgerages[i] >= 70) && (studentAvgerages[i] < 80)) {
      return "C"
    } else {
      return "Failed"
    }
  }
}

console.log(evalGrades(studentAvgerages[0]))
console.log(evalGrades(studentAvgerages[1]))
console.log(evalGrades(studentAvgerages[2]))

标签: javascriptarraysif-statement

解决方案


您可以采取提前退出的方法来获得成绩。else由于 return 声明,不需要任何部分。

为了获得平均值,您可以采用动态方法添加值并除以数组的长度。

const
    add = (a, b) => a + b,
    getAverage = array => array.reduce(add, 0) / array.length,
    evalGrades = grade => {
        if (grade >= 90) return "A";
        if (grade >= 80) return "B";
        if (grade >= 70) return "C";
        return "Failed";
    },
    studentGrades = [[80, 90, 94], [80, 70, 60], [76, 82, 91]],
    studentAvgerages = studentGrades.map(getAverage);
    

console.log(...studentAvgerages);
console.log(...studentAvgerages.map(evalGrades));


推荐阅读