finding cumulative
by amrendra kumar
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
JavaScript
function returnArr() {
let input1 = [
{
connect: true,
timestamp: '2019-05-10T16:47:32.000Z'
},
{
connect: false,
timestamp: '2019-05-10T16:48:32.000Z'
},
{
connect: true,
timestamp: '2019-05-10T16:50:32.000Z'
}
];
let input2 = [
{
connect: true,
timestamp: '2019-05-10T16:47:32.000Z'
},
{
connect: true,
timestamp: '2019-05-10T16:49:32.000Z'
},
{
connect: false,
timestamp: '2019-05-10T16:51:32.000Z'
}
];
let input3 = [
{
connect: true,
timestamp: '2019-05-10T16:47:32.000Z'
},
{
connect: false,
timestamp: '2019-05-10T16:50:32.000Z'
},
{
connect: false,
timestamp: '2019-05-10T16:51:32.000Z'
}
];
let arr = [{ macId: '123', events: input1 }, { macId: '33', events: input2 }];
return arr;
}
const getStatusAtEvent = (e, eventsArray) => {
const Index = eventsArray.findIndex(a => moment(a.timestamp).isAfter(e.timestamp));
//moment('2010-10-20').isAfter('2010-10-19');
const event =
Index === -1 ? eventsArray[eventsArray.length - 1] : Index > 0 ? eventsArray[Index - 1] : { connect: false };
const count = event.connect ? 1 : 0;
return count;
};
const combinedArray = array => {
const allArray = array.reduce((acc, current) => [...acc, ...current.events], []);
console.log('combined',allArray )
let combinedUniqueArray = _.uniqBy(allArray, 'timestamp');
//console.log('unique',combinedUniqueArray )
const sortedarray = combinedUniqueArray.sort((e1, e2) => moment(e1.timestamp).diff(moment(e2.timestamp)));
console.log('unique n sortedarray',sortedarray)
const newEvents = sortedarray.map(combinedEvent => {
let countAtcombinedEvent = 0;
array.map(eventData => {
const count = getStatusAtEvent(combinedEvent, eventData.events);
countAtcombinedEvent += count;
});
return { x: combinedEvent.timestamp, y:countAtcombinedEvent }
});
console.log('data', newEvents);
};
//let newEvents = [...input1,...