Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.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_Node.js_Arrays - Fatal编程技术网

Javascript 使用条件合并数组中的连续对象,并更新合并的元素

Javascript 使用条件合并数组中的连续对象,并更新合并的元素,javascript,node.js,arrays,Javascript,Node.js,Arrays,给定一组表示按日期排序的车辆路径的对象,在以下情况下,合并连续元素的最有效方法是什么: 区域中的开始位置和区域中的结束位置均为真 区域中的开始位置和区域中的结束位置均为false 如果对象被合并,我们将通过以下方式更新阵列: 开始日期=第一个合并元素的开始日期 结束日期=最后一个合并元素的结束日期 持续时间=所有合并持续时间的总和 start_index=旧数组中第一个合并元素的索引 end_index=旧数组中最后一个合并元素的索引 如果两者都为false,则state=“out\u z

给定一组表示按日期排序的车辆路径的对象,在以下情况下,合并连续元素的最有效方法是什么:

  • 区域中的开始位置和区域中的结束位置均为真
  • 区域中的开始位置和区域中的结束位置均为false
如果对象被合并,我们将通过以下方式更新阵列:

  • 开始日期=第一个合并元素的开始日期
  • 结束日期=最后一个合并元素的结束日期
  • 持续时间=所有合并持续时间的总和
  • start_index=旧数组中第一个合并元素的索引
  • end_index=旧数组中最后一个合并元素的索引
  • 如果两者都为false,则state=“out\u zone”
  • 如果两者都为真,则state=“in_zone”
如果元素在\u区域中具有开始位置\u,在\u区域中具有结束位置\u,且布尔值不同:

  • 我们保留它(不合并)
  • 开始索引和结束索引=旧数组中的索引
  • state=“to_zone”if(在_zone中的开始位置=false,在_zone中的结束位置=true)
  • state=“from_zone”if(开始_-location_在_-zone==true,结束_-location_在_-zone==false)
例如:

[
{
“开始日期”:“2020-10-07T13:53:26.000”,
“结束日期”:“2020-10-07T14:55:49.000”,
“启动区域中的位置”:false,
“结束位置在区域中”:false,
“持续时间”:143000
},
{
“开始日期”:“2020-10-07T15:53:26.000”,
“结束日期”:“2020-10-07T16:55:49.000”,
“启动区域中的位置”:false,
“结束位置在区域中”:正确,
“持续时间”:7000
},
{
“开始日期”:“2020-10-07T17:53:26.000”,
“结束日期”:“2020-10-07T18:55:49.000”,
“启动区域中的位置”:真,
“结束位置在区域中”:正确,
“持续时间”:20000
},
{
“开始日期”:“2020-10-07T19:53:26.000”,
“结束日期”:“2020-10-07T20:55:49.000”,
“启动区域中的位置”:真,
“结束位置在区域中”:正确,
“期限”:30000
},
{
“开始日期”:“2020-10-07T21:53:26.000”,
“结束日期”:“2020-10-07T22:55:49.000”,
“启动区域中的位置”:false,
“结束位置在区域中”:false,
“持续时间”:4200
},
{
“开始日期”:“2020-10-07T23:53:26.000”,
“结束日期”:“2020-10-08T00:00:49.000”,
“启动区域中的位置”:false,
“结束位置在区域中”:false,
“持续时间”:4200
}
]
结果:

[{
“开始日期”:“2020-10-07T13:53:26.000”,
“结束日期”:“2020-10-07T14:55:49.000”,
“州”:“外区”,
“期限”:143000,
“开始索引”:“0”,
“结束索引”:“0”
},
{
“开始日期”:“2020-10-07T15:53:26.000”,
“结束日期”:“2020-10-07T16:55:49.000”,
“州”:“至区域”,
“持续时间”:7000,
“开始索引”:“1”,
“结束索引”:“1”
},
{
“开始日期”:“2020-10-07T17:53:26.000”,
“结束日期”:“2020-10-07T19:55:49.000”,
“州”:“在区内”,
“期限”:50000,
“开始索引”:“2”,
“结束索引”:“3”
},
{
“开始日期”:“2020-10-07T21:53:26.000”,
“结束日期”:“2020-10-08T00:10:49.000”,
“州”:“外区”,
“持续时间”:8400,
“开始索引”:“4”,
“结束索引”:“5”
}
]
减少成本的好例子

const数据=[
{
“开始日期”:“2020-10-07T13:53:26.000”,
“结束日期”:“2020-10-07T14:55:49.000”,
“启动区域中的位置”:false,
“结束位置在区域中”:false,
“持续时间”:143000
},
{
“开始日期”:“2020-10-07T15:53:26.000”,
“结束日期”:“2020-10-07T16:55:49.000”,
“启动区域中的位置”:false,
“结束位置在区域中”:正确,
“持续时间”:7000
},
{
“开始日期”:“2020-10-07T17:53:26.000”,
“结束日期”:“2020-10-07T18:55:49.000”,
“启动区域中的位置”:真,
“结束位置在区域中”:正确,
“持续时间”:20000
},
{
“开始日期”:“2020-10-07T19:53:26.000”,
“结束日期”:“2020-10-07T20:55:49.000”,
“启动区域中的位置”:真,
“结束位置在区域中”:正确,
“期限”:30000
},
{
“开始日期”:“2020-10-07T21:53:26.000”,
“结束日期”:“2020-10-07T22:55:49.000”,
“启动区域中的位置”:false,
“结束位置在区域中”:false,
“持续时间”:4200
},
{
“开始日期”:“2020-10-07T23:53:26.000”,
“结束日期”:“2020-10-08T00:00:49.000”,
“启动区域中的位置”:false,
“结束位置在区域中”:false,
“持续时间”:4200
},
{
“开始日期”:“2020-10-08T00:00:49.000”,
“结束日期”:“2020-10-08T00:00:50.000”,
“启动区域中的位置”:false,
“结束位置在区域中”:false,
“持续时间”:1
},
{
“开始日期”:“2020-10-08T00:00:50.000”,
“结束日期”:“2020-10-08T00:00:51.000”,
“启动区域中的位置”:false,
“结束位置在区域中”:false,
“持续时间”:2
},
{
“开始日期”:“2020-10-08T00:00:51.000”,
“结束日期”:“2020-10-08T00:00:52.000”,
“启动区域中的位置”:false,
“结束位置在区域中”:正确,
“持续时间”:12
}
]
让前一个=未定义
让mergedData=data.reduce((acc,cur,i)=>{
cur.start_index=i
cur.end_index=i
如果(!上一个){
前一个=当前
返回acc
}
让isStartInZone=previous.start\u location\u in_zone===previous.end\u location\u in_zone
设isEndNotInZone=cur.start\u location\u in_zone===cur.end\u location\u in_zone
let shouldMerge=isStartInZone&&isEndNotInZone&&previous.start\u location\u in_zone===cur.start\u location\u in_zone
如果(应该合并){
previous.end_date=cur.end_date
上一个持续时间+=当前持续时间
previous.end_index=i
//附件推送(上一个)
//先前=未定义
返回acc
}
附件推送(上一个)
前一个=当前
返回acc
}, [])
//如果最后一个元素未合并,则处理剩余部分
如果(上一个)合并数据推送(上一个)

console.log(mergedData)
@pilchard是的,不清楚。你要给我们看吗