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 = [{
    connected: true,
    timestamp: new Date('5-May-2019 10:00:00')
  },
  {
    connected: false,
    timestamp: new Date('5-May-2019 10:01:00')
  },
  {
    connected: true,
    timestamp: new Date('5-May-2019 10:05:00')
  }
]

const input2 = [{
    connected: true,
    timestamp: new Date('5-May-2019 10:00:00')
  },
  {
    connected: true,
    timestamp: new Date('5-May-2019 10:02:00')
  },
  {
    connected: 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.connected !== inputArray[i+1].connected) {
      eventToCompare = inputArray[i+1]
    	outputArray.push(eventToCompare)
    }
  }
  console.log(inputArray,outputArray)
  return outputArray
}

const combinedArray = (inputArray1, inputArray2) => {
	//const filteredArray1 = filterInputEvents(inputArray1)
  //const filteredArray2 = filterInputEvents(inputArray2)
  console.log([...inputArray1, ...inputArray2])
  const combinedTimestamps = _.uniq([...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]: {connected:false}
		const eventArray2 = a2Index === -1 ? inputArray2[inputArray2.length - 1]: a2Index > 0 ? inputArray2[a2Index - 1]: {connected:false}
    const event = eventArray1.connected && eventArray2.connected
    console.log(event)
    return {
      connected: event,
     ...