秒表jQuery,计算平均值和显示

时间:2014-10-06 14:05:58

标签: javascript jquery arrays time average

我正在制作秒表,现在它可以工作,但我希望我可以计算人们得到的平均时间。例如。让我说我在array中有5次,如下所示:scores = ["00:32:192", "00:30:126", "00:31:542", "00:25:236", "00:36:320"];。您现在可能会想:到底是什么?时间顺序是:分钟:秒:毫秒。使用for循环将数组打印到屏幕上。

的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 个答案:

答案 0 :(得分:1)

请注意,我在下面提供的代码并不直接依赖于JQuery或任何库。你给它提供了一系列时间字符串&#39;它会给你一个平均值。您可以使用您选择的任何库来获取该字符串数组。

首先,你需要一个实用函数,它将时间字符串分解为它的组件:

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}