Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 秒表jQuery,计算平均值并显示_Javascript_Jquery_Arrays_Time_Average - Fatal编程技术网

Javascript 秒表jQuery,计算平均值并显示

Javascript 秒表jQuery,计算平均值并显示,javascript,jquery,arrays,time,average,Javascript,Jquery,Arrays,Time,Average,我正在制作秒表,现在它可以工作了,但我想我可以计算出人们的平均时间。例如,假设我在一个数组中有5次,如下所示:得分=[“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"); funct

我正在制作秒表,现在它可以工作了,但我想我可以计算出人们的平均时间。例如,假设我在一个
数组中有5次,如下所示:
得分=[“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);
        }
    }

});
我想知道,如果数组有5个不同的时间值(如上面我向您展示数组格式的示例),它会在屏幕上输出平均值。正如你们所看到的,我只是为自己画了一幅图,但我想要一个计算它的函数。我在jQuery中构建它是因为计时器在这里比在JS中工作得更好

如果你们中的一些人能给我举个例子,然后用其中的函数重新编写我的代码,那就太好了。我真的为此苦苦挣扎了好几天,想知道如何计算5和/或12的平均值


谢谢。

请注意,我下面提供的代码并不直接依赖于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
  };
};

啊,谢谢你的病人,也谢谢你花时间写这篇文章。现在可以了。我得找出你的密码,但我搞定了。谢谢
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}