【问题标题】:How to exclude zero values from an array when calculating average?计算平均值时如何从数组中排除零值?
【发布时间】:2019-04-12 23:03:56
【问题描述】:

我正在尝试从数组中排除“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

【问题讨论】:

  • 使用函数filter创建一个新数组只是为了获取长度是不行的。

标签: javascript arrays average


【解决方案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);

    【讨论】:

      猜你喜欢
      • 2014-12-02
      • 2020-09-06
      • 2022-11-17
      • 2022-11-28
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多