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

332
Vistas
Average 2 Keys in ChartJS

I'm working with ChartJS on a project the moment, showing user-added records for tracking weight, heart rate etc. I am running into a exception where if the user adds 2 records for 1 day that are slightly different values, I am getting this:

enter image description here

Where you can see it has added them both to the same axis. An example of the data set is below:

[    
  {x: '2021-09-21', y: '30.00'},
  {x: '2021-09-22', y: '65.00'},
  {x: '2021-09-23', y: '48.00'},
  {x: '2021-09-23', y: '25.00'},
  {x: '2021-09-24', y: '55.00'},
]

Is there something inbuilt with ChartJS that would average these out or is it a case of implementing it myself as I load the data in?

Thank you

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

0

So I thought it would be easier just to reduce the array down myself and provide that as the dataset for ChartJS, i'll leave the code below for anyone in a similar position. It makes use of a React hook to update whenever the actual dataset is updated:

/**
 * When the metric values have been updated
 */
useEffect(() => {
    /**
     * Init a new object to store the values in
     */
    let sorted = {};
    /**
     * Loop through all the metric values that were added
     */
    metricValues.forEach((value) => {
        /**
         * If we already have a copy of it in the new object
         */
        if (sorted[`${value.x}`]) {
            /**
             * Push the value onto the array
             */
            sorted[`${value.x}`] = [...sorted[`${value.x}`], value.y];
        } else {
            /**
             * Otherwise just set it as the first value
             */
            sorted[`${value.x}`] = [value.y];
        }
    });
    /**
     * Init a new array to hold the reduced data
     */
    let reducedData = [];
    /**
     * Loop through each of the now sorted values
     */
    Object.entries(sorted).forEach((dataPoint) => {
        /**
         * Get the records array, holding the values to be averaged
         */
        const dateRecords = dataPoint[1];
        /**
         * Make a sum of all the records
         */
        const recordsSum = dateRecords.reduce((a, b) => parseFloat(a) + parseFloat(b), 0);
        /**
         * Then find the avaerage
         */
        const recordsAvg = parseFloat(recordsSum / dateRecords.length).toFixed(2);
        /**
         * Push this new reduced version of the metric records to our local array
         */
        reducedData = [...reducedData, { x: `${dataPoint[0]}`, y: recordsAvg }];
    });
    /**
     * Push the complete reduced array into the local state
     */
    setReducedMetricValues(reducedData);
}, [metricValues]);
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