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