javascript - 将两个时间线数组合并为一个
问题描述
嘿伙计们,我目前被困在一个问题上。
我必须合并到时间线。每个时间线都以对象数组的形式给出。目前我的想法是连接然后对两个输入进行排序。之后,比较开始时间和结束时间。有什么帮助吗?
原来的问题:
编写一个函数将两个数组时间线合并为一个。如果对象值不同,则新值应为 false。
我创建这个是为了更好地理解这个问题:
Timeline1:
// null 45 89 null
// <-----------||---------------------||----------------->
// true false true
Timeline2:
// null 67 null
// <-----------------------||---------------------------->
// true false
MergedTimeline:
// null 45 67 89 null
// <-----------||----------||---------||----------------->
// true false false false
示例输入:
let timeline1 = [
{ start: null, end: 45, value: true },
{ start: 45, end: 89, value: false },
{ start: 89, end: null, value: false }
]
let timeline2 = [
{ start: null, end: 67, value: true },
{ start: 67, end: null, value: false }
]
//expected output
return [
{ start: null, end: 45, value: true },
{ start: 45, end: 67, value: false },
{ start: 67, end: 89, value: false },
{ start: 89, end: null, value: false }
]
这是我目前的尝试:
const mergeTimeline = (arr1,arr2) =>{
let combine = arr1.concat(arr2)
let sortedTimeline= combine.sort((a,b)=>{
return a.start - b.start
})
const mergedTimeline = [sortedTimeline[0]];
for (let i = 1; i < sortedTimeline.length; i++) {
const currentTimeLine = sortedTimeline[I];
const lastMergedTime = mergedTimeline[mergedTimeline.length - 1]
if (lastMergedTime.value !== currentTimeLine.value) {
currentTimeLine.value = false
lastMergedTime.end = Math.max(lastMergedTime.end,currentTimeLine.start)
mergedTimeline.push(currentTimeLine)
} else{
mergedTimeline.push(currentTimeLine)
}
}
return mergedTimeline
}
mergeTimeline(timeline1,timeline2)
解决方案
推荐阅读
- javascript - jQuery将元素附加到对象数组
- jquery - JQueryUI DatePicker 的问题
- javascript - Promise {pending},异步,等待Javascript
- mongodb - Mongodb - 在相应集合上查找触发器列表
- c++ - 使用成员函数创建 std::function 无法编译
- scala - 将值从一个笔记本传递到另一个 - Databricks
- python - 在运行时将小部件添加到嵌套布局
- python - 如何使用 Python 库将段落拆分为行
- bash - -v vs -version vs --version
- c - 反汇编简单的 C 函数。(64 位机器中的 128 位乘法)