Javascript 用于计算平均值的for循环无法按预期工作

Javascript 用于计算平均值的for循环无法按预期工作,javascript,Javascript,我有一个编码挑战,我需要创建一个普通的计算器。由于这是一门初级课程,挑战非常简单,只需输入一组变量并添加它们。然而,我尝试使用for循环使我的生活更轻松 当我记录它时,它总是给我答案 我真的不知道这里出了什么问题。从我的noob的角度来看,这似乎相对合乎逻辑。我尝试将平均var放入for循环中,但它只会平均第一个和第二个,然后移动到第二个和第三个,最后再次给我NaN var johnTeam, mikeTeam; var johnAverage,mikeAverage; johnTeam =

我有一个编码挑战,我需要创建一个普通的计算器。由于这是一门初级课程,挑战非常简单,只需输入一组变量并添加它们。然而,我尝试使用for循环使我的生活更轻松

当我记录它时,它总是给我答案

我真的不知道这里出了什么问题。从我的noob的角度来看,这似乎相对合乎逻辑。我尝试将平均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”。
当前结果“南”.

也考虑使用这个:

var sumjohnTeam  = 0;
johnTeam.forEach(p => (sumjohnTeam  += p));
var avgjohnTeam= sumjohnTeam  /johnTeam.length;
您永远不会使用循环数组,通常不会在循环后使用i。此外,在您的情况下,i始终只是最后一个计数器值。为了得到一个数组的和,你通常会使用,为了得到平均值,你会用前面的结果除以

const johnTeam=[89120103]; 常数mikeTeam=[116,94123]; const average=arr=>arr.reduce p,c=>p+c,0/arr.length; const johnAvg=平均johnteam; const mikeAvg=平均值; console.logjohnAvg;
console.logmikeAvg 您只需要计算循环中的和,然后除以数组中的元素数

以下是您的try的更新版本:

var johnTeam=[89,120,103], mikeTeam=[116,94,123], johnAverage=0, mikeAverage=0; //添加了一个参数,以便可以发送要计算其平均值的团队数组。 函数averageCalcteamArray{ //存储总数。 var总和=0; //循环并计算总和。 //注意teamArray[i]不仅仅是i。 对于teamArray中的var i,总和+=teamArray[i]; //根据数组长度计算平均值并将其注销。 console.logsum/teamArray.length; } //测验 averageCalcjohnTeam;//104
averageCalcmikeTeam;//111算术平均值的计算方法是将所有测量值之和除以测量值总数。如果您想成为一名优秀的统计学家,空/未定义的度量值将计入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 ;
}

你到底期望johntam{var j=i++;}中的i做什么…?你的代码中有很多东西使得你的问题过于宽泛,无法解决堆栈溢出问题。如果您要在任何浏览器中逐步浏览JavaScript控制台F12中的代码,那么这将有助于您了解每一步发生的情况。@PatrickRoberts现在我想起来了。。。这看起来真的很愚蠢。我在想我可以把j变成数组[1]和数组[2],来选择第二和第三项,因为数组[I]是第一项。但现在我意识到它实际上并没有这么做,哈哈。这不是一个解释,对于一个甚至还不知道如何编写for循环的人来说,这也不是一个特别直接的方法。这可以稍微清理一下。。。我认为如果你的函数返回结果而不是记录结果,那么它会更有用,这将允许你使用两个当前未使用的变量。我试图非常简单,因为OP说他仍然在学习,即使我们仍然在学习,我试图跟随他的尝试,只是做了更正。不过谢谢你的评论。如果你想继续从函数中记录结果,那么我建议至少删除未使用的变量。顺便说一句,我没有投反对票,我也不打算投反对票。其他答案也非常有效,每个人似乎都知道他们在说什么。不过,这似乎是我最容易完成的,谢谢你对我的代码进行了更正。我不习惯JS语法,我只是在这里和那里接触了一些代码,没有任何实践。@PatrickRoberts这是真的-这只是一个补充。我的观点是使用for in是一个错误。我相信这是一个非常有效的解决方案,但对我来说似乎相对复杂。我可以理解常量,但是平均位似乎令人困惑,我没有得到reduce函数,因为我在谷歌上搜索了5秒钟,它似乎减少了数组的大小或其他东西,但我不知道它在你的示例中是如何工作的。如果您能一步一步地解释一下平均行,那将是令人惊讶的。@emtee在您浏览器的开发人员控制台中运行以下命令,希望它会更有意义:Console.log'reduce:,[89120103]。reducep,c=>{Console.log{p,c,'p+c':p+c};返回p+c;},0@emtee Patrick在文档中添加了一些链接,这些链接详细解释了函数以及他的评论。。。不要使用你标记为已接受的答案-它是错误的
const johnTeam    = [89,120,103];
const johnAverage = mean( johnTeam ) ;

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