Как исключить нулевые значения из массива при вычислении среднего?

#javascript #arrays #average

#javascript #массивы #среднее

Вопрос:

Я пытаюсь исключить значения «0» из массива, чтобы получить лучший средний результат.

мой массив: [0, 0, 0, 0, 80, 90, 100, 0]

 
function clacGPA(gradeData) {
  var sum, avg = 0;

  if (gradeData.length) {
    sum = gradeData.reduce(function (a, b) {
      return a   b;
    });
    avg = sum / gradeData.length;
  }
  document.getElementById('gpa').innerText = avg.toFixed(2);
}


My expected result should be:
avg = 80 90 100 / 3
  

Комментарии:

1. Создайте новый массив, используя функцию filter только для получения длины, это не нормально.

Ответ №1:

Сначала просто отфильтруйте значения 0:

 clacGPA([0, 0, 0, 0, 80, 90, 100, 0]);
function clacGPA(gradeData) {
  const filtered = gradeData.filter(item => item !== 0);
  const sum = filtered.reduce((a, b) => a   b);
  const avg = sum / filtered.length;
  console.log(avg);
}  

Ответ №2:

Вы можете использовать функцию reduce с аккумулятором, который хранит количество и сумму.

 let arr = [0, 0, 0, 0, 80, 90, 100, 0];
let result = arr.reduce((a, c) => {
  if (c !== 0) {
    a.count  ;
    a.sum  = c;
  }
  
  return a;
}, {count: 0, sum: 0});

if (result.count) console.log(result.sum / result.count);