Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.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时间_Javascript - Fatal编程技术网

数组中多个毫秒日期之间的javascript时间

数组中多个毫秒日期之间的javascript时间,javascript,Javascript,如果我有一个以毫秒为单位的数组对象,如下所示: _m7q7sj2wp: { '1433891300733': 1433891300733, '1433891364133': 1433891364133, '1433891526736': 1433891526736, '1433891542793': 1433891542793, '1433891550861': 1433891550861 }, _7gh4d0f6l: { '14338

如果我有一个以毫秒为单位的数组对象,如下所示:

  _m7q7sj2wp:
   { '1433891300733': 1433891300733,
     '1433891364133': 1433891364133,
     '1433891526736': 1433891526736,
     '1433891542793': 1433891542793,
     '1433891550861': 1433891550861 },
  _7gh4d0f6l:
   { '1433891352741': 1433891352741,
     '1433891390836': 1433891390836,
     '1433891461772': 1433891461772,
     '1433891523376': 1433891523376,
     '1433891598007': 1433891598007 },
它是通过以下方式创建的:

for (var i = 0, j = results.length; i < j; i++){

    var userguid = results[i].guid;

    var timestamp = results[i].ts;
    if(!guid_t[userguid]){

        guid_t[userguid] = {};

    }

    guid_t[userguid][timestamp] = timestamp;
}

最后,我把我接受的答案改为基思A的,因为它在我的情况下更有效。但这三个答案都是令人惊讶的

这是一个脚本,它将查找数组之间的时间差,然后给出平均间隔

<script>

ar = {
    '1433891300733': 1433891300733,
        '1433891364133': 1433891364133,
        '1433891526736': 1433891526736,
        '1433891542793': 1433891542793,
        '1433891550861': 1433891550861
    };
cal(ar);

function cal(ar) {

    var sum = 0;
    var n = Object.keys(ar).length - 1;
    for (var i = 0; i < n; i++) {
        var x = ar[Object.keys(ar)[i]];
        var y = ar[Object.keys(ar)[i + 1]];
        sum += Math.abs(x-y);
    }

    alert("Average: " + sum / n);
}

ar={
'1433891300733': 1433891300733,
'1433891364133': 1433891364133,
'1433891526736': 1433891526736,
'1433891542793': 1433891542793,
'1433891550861': 1433891550861
};
cal(ar);
功能校准(ar){
var总和=0;
var n=Object.keys(ar).length-1;
对于(变量i=0;i
为了便于阅读,我已更改了数组名称


编辑:为了访问对象,我修改了循环,以便可以通过对象的索引访问对象值。

您可以使用reduce

var sum = [1433891352741,
          1433891390836,
          1433891461772,
          1433891523376,
          1433891598007];

var avg = sum.reduce(function(total, current, index, array){
    if (index < (array.length-1)){
        return total +  (array[index+1] - current);
    }else{
        return total / (array.length-1);
    }
}, 0);


alert("Average: "+ avg + " ms or " + avg / 1000 + " sec");

因此,现在您的guid\u t[userguid]包含一个时间戳数组而不是对象。

假设您有一个普通的值数组:

var值=[1433891300733、143389136133、1433891526736、1433891542793、1433891550861];
//计算V[k-1]和V[k]之间的差值

//对于1,为什么要调用parseint处理数字?这将把它们转换成一个字符串,然后再转换成数字。@Paulpro因为我们必须找到平均值并执行数学运算,所以将它们转换成整数很重要,因为在字符串格式中,它们只会相互附加,而且不清楚我们想要的是绝对差,而不是实际的差。为了以防万一,我会删除Math.abs,因为以后在数组元素出现错误的地方会更容易注意到错误。数组中没有字符串,只有数字。@Paulpro我们必须找到值之间差值的平均值,所以我猜是abs()是必要的,因为如果没有它,某些值将为负值时间戳是否唯一?这就是你在对象中添加它们的原因吗?是和否。时间戳是从mongodb中提取的。每一个都在它自己的文档中。如果已经保证了唯一性,则可以使用数组。事实上,这样更好,因为对象属性没有严格的顺序。嗯,我的答案对你有用吗?老实说,我没有尝试过,但今天晚些时候我会尝试。虽然我没有这样的值数组;或者,如果有多个(读:数百个)数组要创建和循环,如何更改for循环以创建这样的数组
var sum = [1433891352741,
          1433891390836,
          1433891461772,
          1433891523376,
          1433891598007];

var avg = sum.reduce(function(total, current, index, array){
    if (index < (array.length-1)){
        return total +  (array[index+1] - current);
    }else{
        return total / (array.length-1);
    }
}, 0);


alert("Average: "+ avg + " ms or " + avg / 1000 + " sec");
guid_t[userguid].push(timestamp);