首页 > 解决方案 > 函数中的过滤方法以输出平均值

问题描述

我试图过滤给定的数组,只输出一个新数组的平均值。但是,由于某种原因,数组的长度是基于其他数据类型所在的原始数组的长度,尽管我指定长度是基于newArr数组的。

有人可以帮忙吗?

const bills = [[], 4, 42, 9, "error"];

const calcAverage = function (arr) {
    let sum = 0;
    let avg;
    for (let i = 0; i < arr.length; i++) {
        if (typeof arr[i] === "number") {
            sum = sum + arr[i];
            avg = sum / arr.length
        } else {
            const newArr = arr.filter(arr => typeof arr[i] === "number");

            for (let b = 0; b < newArr.length; b++) {
                sum = sum + newArr[b];
                avg = sum / newArr.length;
            }
        }
    }
    return avg;
}


console.log(calcAverage(bills));

标签: javascriptfunctionfor-loopmethodsfilter

解决方案


你真的不需要.filter使用for loop.

相反,您可以保留count到目前为止遇到的数字数量并使用它来计算您的平均值。如果您遇到不是数字的项目,我们可以跳过它并继续前进。

const bills = [[], 4, 42, 9, 'error'];

const calcAverage = function (arr) {
  let sum = 0, avg = 0;

  for (let i = 0, count = 0; i < arr.length; i++) {
    if (typeof arr[i] === 'number') {
      count++;
      sum += arr[i];
      avg = sum / count;
    }
  }

  return avg;
};

console.log(calcAverage(bills));


推荐阅读