Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

142
Vistas
¿Cómo asignar/reducir una serie de valores vinculados a la 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 de 7 días consecutivos y un promedio de 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 donde los valores se acumulan así:

 Running total 1: 1 Running total 2: 1,2 ... Running total 7: 1,2,3,4,5,6,7 Running total 8: 2,3,4,5,6,7,8 Running total 9: 3,4,5,6,7,8,9 Running total 10: 4,5,6,7,8,9,10

¿Cómo diseñaría un reductor para esto? Estoy abierto a enfoques alternativos.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

¿Algo como esto?

Aquí se vuelve a calcular el total cada vez. Si hubiera más valores o calcular los totales fuera computacionalmente costoso, podría mantener una pila de valores y presionar/pop para restar los valores antiguos e impulsar los nuevos. Para un total acumulado de 7, es más rápido volver a calcular con cada emisión.

Hice el observable vacío para que se compile este ejemplo de juguete. Deberá proporcionar algunos datos en lugar de un flujo EMPTY .

 interface measurement { date : string, temp : number, hum : number } let measurements$: Observable<measurement> = EMPTY; measurements$.pipe( scan((acc, curr) => [...acc.slice(-6), curr], [] as measurement[]), map(measurements => ({ runningDates: measurements.map(({date}) => date), totalTemp: measurements.reduce((acc,{temp}) => acc + temp, 0), totalHum: measurements.reduce((acc,{hum}) => acc + hum, 0), })) ).subscribe(console.log);
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda