为什么我的平均函数返回NaN?

时间:2019-05-09 16:49:15

标签: javascript arrays class

我创建了一个类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 ) );

5 个答案:

答案 0 :(得分:0)

因为您无法添加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;
}

答案 1 :(得分:0)

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

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

另外,请修正价格的拼写,请客气。

答案 2 :(得分:0)

您可以执行以下操作:

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);

答案 3 :(得分:0)

将您的averageCost函数更改为

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

答案 4 :(得分:0)

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

在这一行:

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

应该是:

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