Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Arrays - Fatal编程技术网

Javascript 如何计算对象数组中两个项目之间经过的时间?

Javascript 如何计算对象数组中两个项目之间经过的时间?,javascript,arrays,Javascript,Arrays,我有这样一个对象数组: events: [{ eventInfo: "START_event1", timeStamp: "2020-11-29T22:01:53.634041+00:00" }, { eventInfo: "END_event1", timeStamp: "2020-11-29T22:04:00.634041+00:00" }, { eventInf

我有这样一个对象数组:

events: 
 [{
   eventInfo: "START_event1",
   timeStamp: "2020-11-29T22:01:53.634041+00:00"
  },
  {
   eventInfo: "END_event1",
   timeStamp: "2020-11-29T22:04:00.634041+00:00"
  },
  {
   eventInfo: "START_event1",
   timeStamp: "2020-11-29T23:00:00.634041+00:00"
  },
  {
   eventInfo: "START_event2",
   timeStamp: "2020-11-29T23:01:53.634041+00:00"
  },
  {
   eventInfo: "END_event1",
   timeStamp: "2020-11-29T23:04:50.634041+00:00"
  },
  {
   eventInfo: "END_event2",
   timeStamp: "2020-11-29T23:24:00.634041+00:00"
  }]
该数组将多次出现具有相同名称的事件。我应该计算事件1、事件2等经过的总时间

问题在于,除了名称中有start或end的eventInfo字符串外,没有其他方法可以知道哪些事件开始和结束是一对。例如,后续的START_event1和END_event1应该是一对,START_event2和END_event2也是一对(即使它们之间有另一个START_event1)

我要寻找的最终结果是一个新的数组,其中每个事件名称都有总的运行时间

[{
event1: totalRuntime
},
{
event2: totalRuntime
},
{
eventN: totalRuntime
}]

下面是通过事件数组进行解析并配对每个开始/结束时间的开始

诀窍是将每个“开始时间”事件添加为对象表的成员。当遇到相应的“结束时间”事件时,它会从表中取出原始开始时间,计算差值,并将运行表添加到另一个表中

parseEventsList
的返回值是一个对象(映射),它具有每个事件的总运行时间(以毫秒为单位)。将该对象转换为所需的格式是留给您的练习

运行示例:

> totals = parseEventsList(events)
{ event1: 417000, event2: 1327000 }
函数parseEventsList(事件){
var startTimes={};
变量总数={};
对于(var i=0;i控制台日志(总计)以下是通过事件数组进行解析并配对每个开始/结束时间的开始

诀窍是将每个“开始时间”事件添加为对象表的成员。当遇到相应的“结束时间”事件时,它会从表中取出原始开始时间,计算差值,并将运行表添加到另一个表中

parseEventsList
的返回值是一个对象(映射),它具有每个事件的总运行时间(以毫秒为单位)。将该对象转换为所需的格式是留给您的练习

运行示例:

> totals = parseEventsList(events)
{ event1: 417000, event2: 1327000 }
函数parseEventsList(事件){
var startTimes={};
变量总数={};
对于(var i=0;i控制台日志(总计)在您的示例中,我假设所有数据都是
字符串

重复事件将被忽略

const事件=[{
事件信息:“启动事件1”,
时间戳:“2020-11-29T22:01:53.634041+00:00”
},
{
事件信息:“结束事件1”,
时间戳:“2020-11-29T22:04:00.634041+00:00”
},
{
事件信息:“启动事件1”,
时间戳:“2020-11-29T23:00:00.634041+00:00”
},
{
事件信息:“启动事件2”,
时间戳:“2020-11-29T23:01:53.634041+00:00”
},
{
事件信息:“结束事件1”,
时间戳:“2020-11-29T23:04:50.634041+00:00”
},
{
事件信息:“结束事件2”,
时间戳:“2020-11-29T23:24:00.634041+00:00”
}
]
s=[]
最终=[]
events.map(x=>{
var eventId=x.eventInfo.match(/\d+/)
如果(!s.some(x=>x.id==eventId[0]&&&(s.some(c=>x.end!=null))){
如果(x.eventInfo.includes(“开始”)){
s、 推({
id:eventId[0],
开始:x.timeStamp,
结束:空
})
}否则{
如果(s.some(x=>x.id==eventId))
s、 查找(x=>x.id==eventId[0])。结束=x.timeStamp
其他的
s、 推({
id:eventId[0],
开始:空,
结束:x.timeStamp
})
}
}
})
s、 地图(x=>{
var time=(新日期(x.end).getTime())-(新日期(x.start