Tengo una matriz como esta,
const data =[ { date: 2022-04-11T15:08:54.223Z, coordinates: [Object] }, { date: 2022-04-11T15:09:36.078Z, coordinates: [Object] }, { date: 2022-04-11T15:18:18.405Z, coordinates: [Object] }, { date: 2022-04-11T15:19:45.228Z, coordinates: [Object] }, { date: 2022-04-11T15:21:00.188Z, coordinates: [Object] }, ]Quiero devolver datos basados en intervalos de tiempo, es decir, digamos que el intervalo es de 2 minutos y la hora del primer elemento es a las 11:00 am, luego solo los elementos de la matriz con hora 11:02 am, 11:04 am , 11:06 a. m. etc. Si el intervalo es de 3 minutos, entonces los elementos con hora 11:03 am, 11:06 am... deben devolverse. He probado diferentes métodos. No está trabajando. ¿Me pueden ayudar con una solución más eficiente?
Si no entendiste mi pregunta,
Elementos en la matriz
Element :: Mon Apr 11 2022 20:39:36 GMT+0530 (India Standard Time) Element :: Mon Apr 11 2022 20:40:36 GMT+0530 (India Standard Time) Element :: Mon Apr 11 2022 20:41:36 GMT+0530 (India Standard Time) Element :: Mon Apr 11 2022 20:42:36 GMT+0530 (India Standard Time) Element :: Mon Apr 11 2022 20:43:36 GMT+0530 (India Standard Time) Element :: Mon Apr 11 2022 20:44:36 GMT+0530 (India Standard Time) Element :: Mon Apr 11 2022 20:45:36 GMT+0530 (India Standard Time) Element :: Mon Apr 11 2022 20:46:36 GMT+0530 (India Standard Time)Si configuro el intervalo de tiempo en 2 minutos
Los registros deben ser devueltos así
Element :: Mon Apr 11 2022 20:39:36 GMT+0530 (India Standard Time) Element :: Mon Apr 11 2022 20:41:36 GMT+0530 (India Standard Time) Element :: Mon Apr 11 2022 20:43:36 GMT+0530 (India Standard Time) Element :: Mon Apr 11 2022 20:45:36 GMT+0530 (India Standard Time)un método de reducción hace que esto sea bastante simple
let interval = 3, firstDate; let intervalArr = data.reduce((acc,entry)=>{ let date = new Date(entry.date) // should condition this in case prop is a string and not datetime, but should work as is firstDate ||= date let minutesSinceFirst = ~~((firstDate - date) / 60000) // modulus will be 0 if min is divisible by interval if (minutesSinceFirst % interval === 0) acc.push(entry) // push to accumulator return acc }, []) // accumulator starts as an empty array firstDate = null