【问题标题】:Why does my averaging function return NaN?为什么我的平均函数返回 NaN?
【发布时间】:2019-05-09 16:49:15
【问题描述】:

我创建了一个类 Car 并将该类的对象(car1、car2、car3)添加到一个数组中:

class Car{
    constructor(prise){  
        this.prise = prise;
    }
};

我还声明了一个函数来确定数组中对象的平均价格:

function averageСost(arr) {
    var total = 0;
    for( var i = 0; i < arr.length; i++ ) {
        total = ( total + arr[i] ) / arr.length;;
    }
    return total;
};

var car1 = new Car( 10000 );
var car2 = new Car( 20000 );
var car3 = new Car( 30000 );
var cars = [ car1, car2, car3 ];  

console.log( averageСost( cars ) );

【问题讨论】:

  • 为什么你的第二个代码块中没有提到prise
  • total + arr[i] ==> total + arr[i].prise
  • total + arr[i] 毫无意义,因为arr[i]Car 而不是Number

标签: javascript arrays class


【解决方案1】:

你可以这样做:

class Car{
    constructor(prise){  
        this.prise = prise;
    }
};

let array = [];
array.push(new Car(1));
array.push(new Car(2));
array.push(new Car(3));

let avg = 0;

if (array.length > 0) {
  let sum = 0;
  array.forEach((car) => sum += car.prise);
  avg = sum / array.length;
}

console.log(avg);

【讨论】:

    【解决方案2】:

    因为您无法添加 Car 对象(您正在使用 total + arr[i] 执行此操作)。您需要添加这些对象的prise 属性。

    另外,你的平均逻辑是错误的;每次加法后,您都要除以数组长度,这会给您一个不正确的结果。你的功能应该是:

    function averageСost(arr) {
        var total = 0,
            i;
        for(i = 0; i < arr.length; i++) {
            total = total + arr[i].prise;
        }
        return total / arr.length;
    }
    

    【讨论】:

      【解决方案3】:

      您正在尝试将汽车对象添加到另一个汽车对象,而您想将每辆汽车的价格相加。

      function averageСost(arr) {
          var total = 0;
          for(var i = 0; i < arr.length; i++) {
              total = (total + arr[i].prise) / arr.length;
          }
          return total;
      }
      

      另外,请修正价格的拼写,因为感觉很糟糕

      【讨论】:

        【解决方案4】:

        问题是您在计算总数时调用的是对象而不是 Car 类中的数字。

        在这一行:

        total = ( total + arr[i] ) / arr.length;
        

        应该是:

        total = ( total + arr[i].prise ) / arr.length;
        

        【讨论】:

          【解决方案5】:

          将你的 averageCost 函数更改为

          function averageСost(arr) {
              var total = 0;
              for(var i = 0; i < arr.length; i++){
                  total = total + arr[i].prise;
              }
              total = total / arr.length;
              return total;
          };
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-05-02
            • 2018-07-03
            • 2019-05-21
            • 2017-08-04
            • 1970-01-01
            • 2021-06-28
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多