for循环来计算平均值不符合预期

时间:2019-07-05 22:03:31

标签: javascript

我在编码方面遇到挑战,我需要创建某种平均计算器。由于这是一门初学者的课程,因此挑战非常简单(只需输入一堆变量并将其添加)。但是,我尝试使用for循环使我的生活更轻松。

当我进行控制台记录时,它一直给我“ NaN”答案。

我真的不知道这是怎么回事。从我的菜鸟角度来看,这似乎是比较合乎逻辑的。我尝试将平均var放入for循环中,但它只是将第一和第二平均,然后移至第二和第三,最后再次给我NaN。

var johnTeam, mikeTeam;
var johnAverage,mikeAverage;

johnTeam = [89,120,103];
mikeTeam = [116,94,123];

function averageCalc(){
    var i;
    for (i in johnTeam){
        var j=i++;
    }
    var average=(johnTeam[i]+johnTeam[j])/3;
    console.log(average)
}

预期结果应为“ 104”。 当前结果为“ NaN”。

4 个答案:

答案 0 :(得分:1)

您永远不会使用for in来循环一个数组,通常在循环后不使用i。另外,您的情况下的i始终仅是最后一个计数器值。要获得一个数组的总和,通常使用reduce并获得平均值,然后将先前的结果除以length

const johnTeam = [89,120,103];
const mikeTeam = [116,94,123];

const average = arr => arr.reduce( ( p, c ) => p + c, 0 ) / arr.length;

const johnAvg = average(johnTeam);
const mikeAvg = average(mikeTeam);

console.log(johnAvg);
console.log(mikeAvg);

答案 1 :(得分:0)

也可以考虑使用此:

var sumjohnTeam  = 0;
johnTeam.forEach(p => (sumjohnTeam  += p));
var avgjohnTeam= sumjohnTeam  /johnTeam.length;

答案 2 :(得分:0)

通过取所有测量值的总和除以测量总数得出的算术平均值。如果您想成为一名出色的统计学家,则null / undefined的度量值将计入N的度量值数量,而不计入所有度量值的总和。这给了我们这个:

function mean( values ) {

  if (!values || !value.length) return undefined;

  let sum = 0;

  for ( let i  = 0 ; i < values.length ; ++i ) {
    const value = values[i];

    if (value == undefined || value == null) continue;

    sum += value ;

  }

  return sum / values.length ;
}

有了它,很简单:

const johnTeam    = [89,120,103];
const johnAverage = mean( johnTeam ) ;

const mikeTeam    = [116,94,123];
const mikeAverage = mean( mikeTeak ) ;

答案 3 :(得分:-2)

您只需要计算loop中的总和,然后在外面除以数组中元素的数量即可。

这是您尝试的更新版本:

var johnTeam = [89, 120, 103],
  mikeTeam = [116, 94, 123],
  johnAverage = 0,
  mikeAverage = 0;

// added a parameter so you can send the team array you'll want to calculate its average.
function averageCalc(teamArray) {
  // stores the sum.
  var sum = 0;
  // loop and calculate the sum.
  // notice the teamArray[i] not only i.
  for (var i in teamArray) sum += teamArray[i];
  // calculate average based on the array length and logs it out.
  console.log(sum / teamArray.length);
}

// tests

averageCalc(johnTeam); // 104

averageCalc(mikeTeam); // 111

相关问题