Tengo esta matriz de objetos:
0: {time: '2021-12-02T23:53:54.062Z', value: 558316} 1: {time: '2021-12-03T00:53:53.959Z', value: 558452} 2: {time: '2021-12-03T01:53:53.934Z', value: 558588} 3: {time: '2021-12-05T23:53:48.617Z', value: 568039} 4: {time: '2021-12-06T00:53:48.609Z', value: 568174} 5: {time: '2021-12-06T01:53:48.545Z', value: 568309} 6: {time: '2021-12-06T02:53:48.480Z', value: 568444} 7: {time: '2021-12-06T03:53:48.393Z', value: 568579}La pregunta es cómo obtener la diferencia de valor por hora, por ejemplo, el valor de 1: 558452 restar al valor de 0: 558316 es igual a 136. Pero no reste si el valor actual y el anterior no están dentro de una hora, por ejemplo, el valor de 3: 568039 restar al valor de 2: 558588, el valor de 3 es más de una hora del valor de 2. Por lo tanto, estos dos no deben restarse, porque obtendrán un valor alto (9,451) en el gráfico.
Resultado Esperado:
{time: '2021-12-03T00:53:53.959Z', value: 136} {time: '2021-12-03T01:53:53.934Z', value: 136} {time: '2021-12-06T00:53:48.609Z', value: 135} {time: '2021-12-06T01:53:48.545Z', value: 135} {time: '2021-12-06T02:53:48.480Z', value: 135} {time: '2021-12-06T03:53:48.393Z', value: 135}Puede usar el mapa para calcular la diferencia y luego filtrar en función de esto.
p.ej.
var data = [ {time: '2021-12-02T23:53:54.062Z', value: 558316}, {time: '2021-12-03T00:53:53.959Z', value: 558452}, {time: '2021-12-03T01:53:53.934Z', value: 558588}, {time: '2021-12-05T23:53:48.617Z', value: 568039}, {time: '2021-12-06T00:53:48.609Z', value: 568174}, {time: '2021-12-06T01:53:48.545Z', value: 568309}, {time: '2021-12-06T02:53:48.480Z', value: 568444}, {time: '2021-12-06T03:53:48.393Z', value: 568579}, ].map(d => (d.time = new Date(d.time), d)); const oneHour = 1000 * 60 * 60; const temp = data.map((m, ix, a) => { if (ix > 0) { m.diff = a[ix].time - a[ix -1].time; m.value2 = a[ix].value - a[ix -1].value; } else { //make first one filter out as //there is no previous m.diff = oneHour + 1; } return m; }) .filter(m => m.diff < oneHour) .map(m => ({ time: m.time, value: m.value2 })); console.log(temp);