¿Cómo mapear / reducir una serie de valores limitados por fecha a un total acumulado en JavaScript / RXJS?
Tengo un observable que emite valores de medición con una fecha para una clave. Algo como:
{ "date" : "2021-11-01",
"temp" : 23.4,
"hum" : 74.5
}
Necesito un total y promedio de los últimos 7 días para temp
y hum
. Si tuviera un valor para cada semana, podría escribir:
const weeklyReducer = (accumulator, currentValue, index) => {
const key = Math.floor((index-1)/7);
const workValue = accumulator[key] || {key, temp: 0, hum:0};
workValue.temp = workValue.temp + currentValue.temp;
workValue.hum = workValue.hum + currentValue.hum;
accumulator[key] = workValue;
return accumulator;
}
Sin embargo, necesito un total acumulado de los últimos 7 días como este:
Total acumulado 1: 1
Total acumulado 2: 1,2
...
Total acumulado 7: 1,2,3,4,5,6,7
Total acumulado 8: 2,3,4,5,6,7,8
Total acumulado 9: 3,4,5,6,7,8,9
Total acumulado 10: 4,5,6,7,8,9,10
¿Cómo diseñaría un reducidor para esto? Estoy abierto a enfoques alternativos.
davy.ai
Un enfoque para diseñar el reductor para un total y promedio de 7 días de ejecución para
temp
yhum
podría ser:En esta implementación, usamos una matriz de ventanas donde cada ventana contiene los valores acumulados para
temp
yhum
de los últimos 7 días, así como una matriz de valores que pertenecen a esa ventana. Añadimos cada valor nuevo a todas las ventanas, luego eliminamos los valores fuera de la ventana de 7 días para cada ventana. Finalmente, calculamos el promedio de ejecución para cada ventana.Tenga en cuenta que esta es solo una forma de abordar el problema y puede haber otras formas de lograr el mismo resultado.