【问题标题】:Filter method in a function to output an average函数中的过滤方法以输出平均值
【发布时间】:2021-08-28 00:21:15
【问题描述】:

我试图过滤一个给定的数组,只输出一个新数组的平均值。但是,由于某种原因,数组的长度基于其他数据类型所在的原始数组的长度,尽管我指定长度基于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));

【问题讨论】:

    标签: javascript function for-loop methods filter


    【解决方案1】:

    您实际上不需要将.filterfor 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));

    【讨论】:

      【解决方案2】:

      修订:

      const bills = [[], 4, 42, 9, "error"];
      const calcAverageOLD = function(arr) {
        let sum = 0;
        let avg;
      // filter Before loop for correct length
        const newArr = arr.filter(primitive => typeof(primitive) === "number");
        console.log(newArr)
        for (let i = 0; i < newArr.length; i++) {
            sum += newArr[i];
            avg = sum / newArr.length;
          }
            return avg;
        }
      console.log('old', calcAverageOLD(bills))
      

      【讨论】:

      • 您也可以考虑扁平化传入的数据...如果 bills[0] 处的空数组不为空。例如:moreBills = [[5,13], 4, 42, 9, "error"]
      【解决方案3】:

      您是否尝试根据数组中的数字计算平均值?

      我不确定我是否理解您的问题,但这是我所做的: 先过滤数字,然后计算平均值就容易多了

      const bills = [[], 4, 42, 9, "error"];
      const calcAvarage2 = function (arr){
          let newArr = arr.filter( item=>typeof(item)==="number")
          let sum = 0;
          for( number of newArr){
              sum += number;
          }
          let avg = sum/ newArr.length
      
          return avg
      }
      
      console.log(calcAvarage2(bills));
      

      【讨论】:

        猜你喜欢
        • 2018-08-12
        • 1970-01-01
        • 1970-01-01
        • 2018-11-03
        • 2021-12-02
        • 1970-01-01
        • 2021-12-19
        • 2019-02-14
        • 2022-12-23
        相关资源
        最近更新 更多