我的日志数据中有一个timestamps
数组。我正在尝试按seconds
对这些时间戳进行分组,以便可以
图表中每1秒显示一次isplay。
[
"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
进行分组并每秒钟显示日志数的最佳方法。
感谢您的帮助。
谢谢
答案 0 :(得分:1)
尝试这种方式
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)
答案 1 :(得分:1)
好吧,我认为您可以采用上面介绍的方法,
在timestamps
中循环,为每个日期创建一个日期,并获得第二个日期。
检查此秒是否存在于新的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);
答案 2 :(得分:1)
或者,您可以使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="tests">
</div>
构建直方图输出:
Array.prototype.reduce
答案 3 :(得分:0)
您可能需要比较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;
}