hardware event array reduction

combine service and java_gateway event array

by amrendra kumar

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

JavaScript

const input1 = [{
    connect: true,
    timestamp: new Date('5-May-2019 10:00:00')
  },
  {
    connect: false,
    timestamp: new Date('5-May-2019 10:01:00')
  },
  {
    connect: true,
    timestamp: new Date('5-May-2019 10:05:00')
  }
]

const input2 = [{
    connect: true,
    timestamp: new Date('5-May-2019 10:00:00')
  },
  {
    connect: true,
    timestamp: new Date('5-May-2019 10:02:00')
  },
  {
    connect: false,
    timestamp: new Date('5-May-2019 10:04:00')
  }
]





const filterInputEvents = inputArray => {
  let eventToCompare = inputArray[0]
  const outputArray = [eventToCompare]

  for (let i = 0; i < inputArray.length - 1; i++) {
    if (eventToCompare.connect !== inputArray[i + 1].connect) {
      eventToCompare = inputArray[i + 1]
      outputArray.push(eventToCompare)
    }
  }
  if (outputArray[outputArray.length - 1].timestamp !== inputArray[inputArray.length - 1].timestamp) outputArray.push(inputArray[inputArray.length - 1])
  //console.log(inputArray, outputArray)
  return outputArray
}

const combinedArray = (inputArray1, inputArray2) => {
  //const filteredArray1 = filterInputEvents(inputArray1)
  ///const filteredArray2 = filterInputEvents(inputArray2)
  console.log('combined', [...inputArray1, ...inputArray2])
  
  const combinedTimestamps = _.uniqBy([...inputArray1, ...inputArray2].map(t => t.timestamp))
  console.log('combinedTimestamps',combinedTimestamps);
  const sortedCombinedTimestamps = _.sortBy(combinedTimestamps)
  //console.log(sortedCombinedTimestamps)
  const combinedEventArray = sortedCombinedTimestamps.map(t => {
   // console.log(t)
    const a1Index = inputArray1.findIndex(a => a.timestamp > t)
    const a2Index = inputArray2.findIndex(b => b.timestamp > t)
   // console.log(a1Index, a2Index);
    const eventArray1 = a1Index === -1 ? inputArray1[inputArray1.length - 1] : a1Index > 0 ? inputArray1[a1Index - 1] : {
      connect: false
    }
    const eventArray2 = a2Index === -1 ? inputArray2[inputArray2.length - 1]...