我想知道我将如何创建一个函数来记录最近的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();`
答案 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;
}