数组中多个毫秒日期之间的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);