我在编码方面遇到挑战,我需要创建某种平均计算器。由于这是一门初学者的课程,因此挑战非常简单(只需输入一堆变量并将其添加)。但是,我尝试使用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”。
答案 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