Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.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

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

Javascript 将两个时间线数组合并为一个

Javascript 将两个时间线数组合并为一个,javascript,arrays,sorting,merge,greedy,Javascript,Arrays,Sorting,Merge,Greedy,嘿,伙计们,我现在被一个问题困住了 我必须和时间线合并。每个时间轴都以对象数组的形式给出。 目前,我的想法是先将两个输入进行合并,然后对它们进行排序。之后,比较开始和结束时间。有什么帮助吗 原问题: 编写一个函数将两条数组时间线合并为一条。如果对象值不同,则新值应为false 我创建此文档是为了更好地直观理解问题: Timeline1: // null 45 89 null // <----------

嘿,伙计们,我现在被一个问题困住了

我必须和时间线合并。每个时间轴都以对象数组的形式给出。 目前,我的想法是先将两个输入进行合并,然后对它们进行排序。之后,比较开始和结束时间。有什么帮助吗

原问题:

编写一个函数将两条数组时间线合并为一条。如果对象值不同,则新值应为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
以下是我目前的尝试:

    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)
const mergeTimeline=(arr1,arr2)=>{
让联合收割机=arr1.concat(arr2)
让sortedTimeline=combine.sort((a,b)=>{
返回a.start-b.start
})
const mergedTimeline=[sortedTimeline[0]];
for(设i=1;i
原始输入总是按正确的顺序排列,就像两个时间线数组总是按正确的顺序排列一样,为什么我这么问是因为两条时间线都以空值开始和结束。@ZenWright没有说,但我假设它们是给你的,我猜我们也可以假设事件对象中的结束时间是多余的,对吗?(可从下一事件开始时间开始)。另外,你用贪婪的标签来标记这个问题——为什么不使用贪婪的方法呢?我想在这种情况下应该会更好…@DavidWinder我确实尝试了一种贪婪的方法,但我被卡住了,我把它作为标签留下了,因为我确实认为它可能能够以这种方式解决。你是对的,结束时间似乎是多余的
    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)