Объедините два массива временных шкал в один

Привет, ребята, я сейчас застрял на вопросе.

Я должен слиться с графиком. Каждая временная шкала представлена ​​в виде массива объектов. В настоящее время мой мыслительный процесс заключался в том, чтобы объединить, а затем отсортировать оба ввода. После этого сравните время начала и окончания. Любая помощь ?

Исходный вопрос:

Напишите функцию для объединения двух временных шкал массива в одну. Если значение объектов отличается, ваше новое значение должно быть ложным.

Я СОЗДАЛ ЭТО, ЧТОБЫ ВИЗУАЛЬНО ПОНИМАТЬ ВОПРОС:

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 можно использовать для создания ботов и автоматизации задач в браузерах с помощью Puppeteer.


246