我的日志数据中有一个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
分组并显示每秒日志数量的最佳方法是什么。
任何帮助,不胜感激。
谢谢
好吧,我认为您可以使用上述方法,我在这里解释:
-
循环浏览您拥有
timestamps
,为每个日期创建一个日期并获取它的第二个。 -
检查此秒是否存在于新的时间戳数组中(将以秒分隔(
-
如果它没有找到第二个,那么它会创建一个具有以下结构的新对象:
{Second: int, Times: []}
其中Second
是"id",Times
是保存该秒所有时间戳的数组。 -
如果它在新数组中找到第二个,那么它只需将时间戳推送到对象。
然后,当您需要使用时间戳时,您可以在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);