Запуск функции на массиве массивов - js - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь взять среднее значение 3 оценок для трех учеников (хранящееся в массиве массивов), а затем выполнить эти средние значения через функцию с помощью оператора else if, чтобы проверить, равны ли средние оценки каждому и A, B или C.

Я бы предпочел не делать отдельную функцию с другим, если для каждого студента среднее значение (поэтому я бы знал, как масштабировать это для более чем 3 входных данных), и я не Я уверен, как я могу индексировать массив AverageGrades в функции, чтобы я мог console.log для каждого элемента (ученика) массива 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]))

Ответы [ 4 ]

1 голос
/ 28 апреля 2020

Думаю, я знал, что вы искали, теперь менее уверен, но надеюсь, это немного поможет, как-нибудь? Как уже показали другие, есть несколько лайнеров, чтобы прийти к вашему среднему, если это то, что вы хотите.

var studentGrades = [
  [80, 90, 94],
  [80, 90, 94],
  [80, 90, 94]
]

for(var i=0; i < studentGrades.length; i++){
    var avg = 0;
    for(var j=0; j < studentGrades[i].length; j++){
        avg += studentGrades[i][j];
    }
    avg = avg/studentGrades[i].length;
    switch(true){
        case (avg >= 90):
            console.log("A");
            break;
        case (avg >= 80):
            console.log("B");
            break;
        case (avg >= 70):
            console.log("C");
            break;
        case (avg >= 60):
            console.log("D");
            break;
        default:
            "Failed";
            break;
    }
}

Я предпочитаю переключаться ... дело для таких задач много раз, но не не забудьте принять во внимание производительность. На массиве из 20000 наборов из 200 оценок учеников, возможно, стоит использовать if / else для поддержания скорости страницы. См. этот ответ для более подробной информации.

1 голос
/ 27 апреля 2020

Если вы новичок в программировании или javascript, попробуйте сначала несколько базовых c примеров и постарайтесь понять, как должен быть структурирован код, чтобы вы могли управлять им и использовать его повторно. По крайней мере, в основном функциональное программирование.

Из того, что я понял из вашего кода, вам нужно что-то, что может динамически вычислять оценки учеников. Я переписал код надеюсь, что это помогает. Кроме того, попытайтесь отладить код самостоятельно, чтобы выяснить, как этот код протекает.

var studentGrades = [
  [80, 90, 94],
  [80, 90, 94],
  [80, 90, 94]
]
function evalGrades(grades) {
  var sum = 0;
  for(var i =0; i<grades.length; i++){
    sum = sum + grades[i];
  }
  var avg = sum/grades.length;
  if (avg >= 90) {
    return "A"
  } else if ((avg >= 80) && (avg < 90)) {
    return "B"
  } else if ((avg >= 70) && (avg < 80)) {
    return "C"
  } else {
    return "Failed"
  }
}
for (var i = 0; i < studentGrades.length; i++) {
    console.log(evalGrades(studentGrades[i]))
}


1 голос
/ 27 апреля 2020

Попробуйте это. Я надеюсь, что я был полезным.

var studentGrades = [
  [80, 90, 94],
  [80, 90, 94],
  [80, 90, 94]
]

for (var i = 0; i < studentGrades.length; i++) {

    var average = studentGrades[i].reduce((a, b) => a + b, 0) / studentGrades[i].length;

    if (average >= 90) { var result = "A" }
    else if ( average >= 80 && average < 90 ) { var result = "B" }
    else if ( average >= 70 && average < 80 ) { var result = "C" }
    else { var result = "Failed" }

    console.log(result);
}
1 голос
/ 27 апреля 2020

Вы можете пройти 1001 * выход с раннего захода на посадку для получения оценки. Нет else частей, необходимых из-за оператора return.

Для получения среднего можно использовать динамический подход c с добавлением значений и делением на длину массива.

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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...