时间戳数组的按秒分组



我的日志数据中有一个timestamps数组。我正在尝试按seconds对这些时间戳进行分组,以便我可以 每 1 秒在图表中播放一次。

[
"2018-08-31T12:52:44.357174404+00:00",
"2018-08-31T12:52:44.357133365+00:00",
"2018-08-31T12:52:44.357185085+00:00", 
"2018-08-31T12:52:44.357192810+00:00",
"2018-08-31T12:52:40.197139820+00:00",
"2018-08-31T12:52:40.197829400+00:00",
............
...........
.........
"2018-08-31T12:49:21.658622784+00:00",
"2018-08-31T12:49:07.121419856+00:00"
]

有人可以让我知道按second分组并显示每秒日志数量的最佳方法是什么。

任何帮助,不胜感激。

谢谢

好吧,我认为您可以使用上述方法,我在这里解释:

  1. 循环浏览您拥有timestamps,为每个日期创建一个日期并获取它的第二个。

  2. 检查此秒是否存在于新的时间戳数组中(将以秒分隔(

  3. 如果它没有找到第二个,那么它会创建一个具有以下结构的新对象:{Second: int, Times: []}其中Second是"id",Times是保存该秒所有时间戳的数组。

  4. 如果它在新数组中找到第二个,那么它只需将时间戳推送到对象。

然后,当您需要使用时间戳时,您可以在arrOfSeconds中运行循环并获取arrOfSeconds[i].Times

let ts = [
"2018-08-31T12:52:44.357174404+00:00",
"2018-08-31T12:52:44.357133365+00:00",
"2018-08-31T12:52:44.357185085+00:00", 
"2018-08-31T12:52:44.357192810+00:00",
"2018-08-31T12:52:40.197139820+00:00",
"2018-08-31T12:52:40.197829400+00:00",
"2018-08-31T12:49:21.658622784+00:00",
"2018-08-31T12:49:07.121419856+00:00"
]
let arrOfSeconds = [];
for (var time of ts){
let second = new Date(time).getSeconds();
let index = arrOfSeconds.findIndex(a => a.Second == second);  

if (index == -1){
let obj= {}
obj.Second = second;
obj.Times = [];
obj.Times.push(time);
arrOfSeconds.push(obj);
}else{  
arrOfSeconds[index].Times.push(time)
}
}
console.log(arrOfSeconds);

试试这种方式

var logArr = [
"2018-08-31T12:52:44.357174404+00:00",
"2018-08-31T12:52:44.357133365+00:00",
"2018-08-31T12:52:44.357185085+00:00", 
"2018-08-31T12:52:44.357192810+00:00",
"2018-08-31T12:52:40.197139820+00:00",
"2018-08-31T12:52:40.197829400+00:00"
]
var secondNumData = {}
logArr.forEach(item => {
var itemSecond = item.slice(0, 19)
if (secondNumData[itemSecond] == null) {
secondNumData[itemSecond] = 0
}
secondNumData[itemSecond]++
})
console.log(secondNumData)

您可能需要比较 UTC 格式的日期,然后将它们添加到唯一的数组中。您可以通过以下方式执行此操作。

function groupBySeconds(array)
{   
let bySeconds = [];
array.forEach(date => {
d = new Date(date);
d = Math.floor(d.getTime()/(1000));
bySeconds[d]= byday[d] || [];
bySeconds[d].push(date);
}
return bySeconds;
}

或者,您可以使用Array.prototype.reduce构建直方图输出:

const logs = [
"2018-08-31T12:52:44.357174404+00:00",
"2018-08-31T12:52:44.357133365+00:00",
"2018-08-31T12:52:44.357185085+00:00", 
"2018-08-31T12:52:44.357192810+00:00",
"2018-08-31T12:52:40.197139820+00:00",
"2018-08-31T12:52:40.197829400+00:00"
];
const seconds = logs.map(l => l.slice(0, 19));
const histogram = seconds.reduce((hist, val) => {
hist[val] = (hist[val] || 0) + 1;
return hist;
}, {});
console.log(histogram);

相关内容

  • 没有找到相关文章

最新更新