JavaScript平均计算器

时间:2015-01-25 07:19:41

标签: javascript average calculator

我想知道我将如何创建一个函数来记录最近的10个Date.now命令,然后将它们转换为平均值。然后我想把它放在侧栏中,使它有点像记分牌。 http://jsfiddle.net/eh5dxyp4/。提前致谢

  clickedTime=Date.now();

  reactionTime=(clickedTime-createdTime)/1000;

  document.getElementById("time").innerHTML=reactionTime;

  this.style.display="none";

  makeBox();

 }

 makeBox();`

2 个答案:

答案 0 :(得分:1)

您已经展示了相当多的代码,这些代码似乎与您问题的实际数学部分无关。我将提供一种方法来完成这一部分:

  

记录最近的10个Date.now命令,然后将它们转换为平均值

创建一个数组:

var recent = [];

一个为该数组添加值的函数,但也确保其中最多只有十个项目:

var recentLimit = 10;
function addRecentItem(item) {
    recent.push(item); // add to end of array
    if (recent.length > recentLimit)
       recent.shift(); // remove from start of array
}

然后你只需要一个函数来计算平均值:

function getRecentAverage() {
    var i,
        sum = 0;
    for (i = 0; i < recent.length; i++)
        sum += recent[i];
    return sum / recent.length;
}

然后,只要在代码中生成Date.now个对象之一,您只需将其添加到recent列表中即可:

addRecentItem(yourValueHere);

然后获得当前的平均值:

console.log( getRecentAverage() );

就你的记分板概念而言,你只需要一个循环遍历recent数组中的任何内容的函数,并创建适当的html元素(例如li元素)。

答案 1 :(得分:0)

在计算它的函数之外的某处添加var reactionTimes=[];,然后使用

var reactionTime = (clickedTime-createdTime)/1000;
reactionTimes.push(reactionTime);
document.getElementById("time").innerHTML=reactionTime;
if (reactionTimes.length==10) {
  var average = reactionTimes.reduce(function(sum, a) { return sum + a },0)/(reactionTimes.length!=0?reactionTimes.length:1);
  reactionTimes.pop(); // make ready for a new 10th value
  document.getElementById("average").innerHTML=average;
}