2014-10-06 54 views
1

我正在使用秒錶,現在它可以工作,但我希望能夠計算出人們獲得的時間的平均值。例如。假設我在array中有5次,如下所示:scores = ["00:32:192", "00:30:126", "00:31:542", "00:25:236", "00:36:320"];。你現在可能會想:這到底是什麼?那麼時間在:分鐘:秒:毫秒。該陣列通過使用for循環打印到屏幕上。秒錶jQuery,計算平均值並顯示

jQuery的

var int, 
    ms=0, 
    s=0, 
    m=0; 

$('#swatch').text("00:00:00"); 

function swatch(){ 

    var startTime = new Date().getTime(); 
    int = setInterval(function(){ 
     var time = new Date().getTime(); 
     var dif = time-startTime; 
     ms= dif%1000; 
     s = Math.floor(dif/1000)%60; 
     m = Math.floor(dif/1000/60)%60; 

     if(ms < 10) { 
      ms = '0'+ms; 
     } 

     if(s < 10) { 
      s = '0'+s; 
     } 

     if(m < 10) { 
      m = '0'+m; 
     } 

     $('#swatch').text(m+':'+s+':'+ ms); 

    },1); 

} 

var scores= []; 



$(document).on('keydown', function(e){ 
    var result = $('#swatch').text(); 
    var i = parseInt(scores.length); 

    if(e.keyCode == 32 && !int){ 
     swatch(); 

    } else if (e.keyCode == 32){ 
     clearInterval(int); 
     int=0; 

     scores.push(result); 
     $('#score ol').append('<li>' + scores[i] + '</li>'); 

     if(scores.length >= 5) { 
      $('#ao5').html("ao5: 00:27:43"); 
      $('#ao5').slideDown(500); 
     } 
     if (scores.length >= 12) { 
      $('#ao12').html("ao12: 00:27:43"); 
      $('#ao12').slideDown(500); 
     } 
    } 

}); 

在我上面的代碼,您看到:

if(scores.length >= 5) { 
    $('#ao5').html("ao5: 00:27:43"); 
    $('#ao5').slideDown(500); 
} 
if (scores.length >= 12) { 
    $('#ao12').html("ao12: 00:27:43"); 
    $('#ao12').slideDown(500); 
} 

我想,如果數組有5個不同的時間值(如在上面對例子中,我向您展示了陣列格式)它在屏幕上輸出平均值。正如你所看到的,我只是自己填充它來描繪它,但我想要一個計算它的函數。我在jQuery中構建它,因爲這裏的定時器比JS中的效果更好。

如果你們中的一些人可以給我一個例子,重寫我的代碼與它的功能,這將是偉大的。我真的很困難這幾天來找出我可以如何計算平均5和/或12.

謝謝。

回答

1

請注意,我在下面提供的代碼不直接依賴JQuery或任何庫。你給它一個'時間字符串'的數組,它會給你一個平均值。您可以使用您選擇的任何庫來獲取該字符串數組。

首先,你需要打破時間字符串轉換成其效用函數的組成部件:

var str_to_time = function(time_str) { 
    var pieces =time_str.split(':'); 
    return { 
    minutes: parseInt(pieces[0], 10), 
    seconds: parseInt(pieces[1], 10), 
    milliseconds: parseInt(pieces[2], 10) 
    }; 
}; 

現在的功能,時間字符串數組轉換爲次數組:

var str_array_to_time_array = function(str_array) { 
    return str_array.map(str_to_time); 
}; 

最後一種方式來平均所有這些值在一起:

var average_time = function(time_array) { 
    var minutes = 0; 
    var seconds = 0; 
    var milliseconds = 0; 

    for (var i = 0; i < time_array.length; i++) { 
    minutes += time_array[i].minutes; 
    seconds += time_array[i].seconds; 
    milliseconds += time_array[i].milliseconds; 
    } 

    minutes /= time_array.length; 
    seconds /= time_array.length; 
    milliseconds /= time_array.length; 

    // Minutes and seconds may be fractional. Carry the fractions down. 
    seconds += (minutes - Math.floor(minutes)) * 60; 
    minutes = Math.floor(minutes); 
    milliseconds += (seconds - Math.floor(seconds)) * 1000; 
    seconds = Math.floor(seconds); 
    milliseconds = Math.round(milliseconds); 
    // if milliseconds is >= 1000, add a second. 
    seconds += Math.floor(milliseconds/1000); 
    milliseconds %= 1000; 
    // If seconds >= 60, add a minute. 
    minutes += Math.floor(seconds/60); 
    seconds %= 60; 

    return { 
    minutes: minutes, 
    seconds: seconds, 
    milliseconds: milliseconds 
    }; 
}; 

現在你可以調用得到一個平均值如下:

average_time(str_array_to_time_array(['33:23:354', '34:00:32'])) 
// Object {minutes: 33, seconds: 41, milliseconds: 693} 
+0

ahh感謝病人和你花時間寫這個。它現在有效。必須弄清楚你的代碼,但我釘了它。謝謝 – user3613655 2014-10-06 16:40:21