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,
...