Bonjour à tous,

J'ai un exercice un peu périlleux car je dois comparer deux, trois ou quatre arrays et faire en sorte qu'elles soient identique. Mais surtout que les changements soient reportés dans une autre array, en respectant l'ordre.

Je m'explique. Je prends des mesures toutes les heures sur un terrain qui sont affichées sur un graphique à deux axe grâce à chartsjs. Mais des fois, un capteur peut être en panne, ou ne pas avoir le même nombre de valeurs dans un espace de temps.

Par exemple, je prends la température du sol et de l'air. Mon baromètre était aujourd'hui en panne et je l'ai remplacé. Donc dans la journée j'avais six mesures de l'air (dont 3 le matin et trois le soir, et 24 mesure du sol. Dans ce cas, chartjs, m'affiche un peu n'importe comment.

Ceci parce que dans l'array de la temperature de l'air j'ai 6 index de 0 à 5.
Et dans l'array de la temperature du sol, j'ai 24 index de 0 à 23.
Donc si je parcours les deux arrays, depuis l'index 0 à 2, les heures vont correspondre, mais ensuite, il y a une incohérence dans l'affichage des valeurs en fonction du temps.

L'idée est de comparer les arrays et de fusionner les valeurs.
Mais attention, c'est plus compliqué que cela car il peut avoir 3 voir 4 array.
Mais surtout, si des dates sont ajoutées dans l'array de gauche, il faut aussi que des valeurs de 0 soient ajouté dans une autres tables, au même index.

Voici plus de précisions
Si je reprends mon exemple de la température du sol et de l'air, la température du sol est affiché dans mon axe Y de gauche, et la temperature de l'air sera affiché dans mon axe Y de droite.

Pour bien suivre mon problème, rendez vous sur cette page
http://www.smart-idea.io/perrieres/
Sélectionner les dates de 03-09-2018 à 05-09-2018, et sélectionner la station 2 et regarder le graph Température.
(après avoir sélectionner les dates, faite peut-être un ctrl+r, pour avoir un console log un peu plus allégé )
J'ai fais un console.log
Code : Sélectionner tout - Visualiser dans une fenêtre à part
console.log("Temperature Success:",data);
Je continue mon explication.

Si vous développez "température success", il y a deux objets.
Le premier objet correspond à la température de l'air dont les valeurs seront affichées sur mon axe Y de gauche car 'y-axis-0'
Le deuxième objets correspond à la température du sol dont les valeurs seront affichés sur mon axe Y de droite car 'y-axis-1'

Vous pouvez déjà constater 'labels' où sont les dates et heures.
Dans le premier objet, il y a 5 index, dans le deuxième objet, il y a 36 index (donc pas 24, car j'ai redémarrer ma station 8 fois)

Si vous observer l'index 1 de mon deuxième objet, la date est '2018-09-03 19:26:42' mais cette date ne figure pas dans mon premier objet.

Il faudrait qu'elle figure aussi à l'index 1 et décaler les autres valeurs. Donc index 1 devient index 2 pour donner la place de '2018-09-03 19:26:42' à l'index 1. Mais il faut surtout que dans le premier l'objet , sous datasets->data que l'index 1 devient aussi index 2 pour que l'index 1 prenne la valeur de 0. (0 car aucune valeur est mesurée à ce moment là)
C'est très important que la valeur correspondant à une date, ait le même index. Voyez-vous le problème?

Mais ca se complique car si vous regarder le graphique "humidité du sol", il y a 3 même capteurs d'humidité du sol (plantés à des profondeurs différentes) dont les valeurs s'affichent dans l'axes Y de gauche, et dans l'axe Y de droite, il y a un compteur de goutte. Ce qui fait 4 objets dont trois avec 'y-axis-0' et un avec
'y-axis-1'. Et plus tard, il y aura 5 objets car dans l'axes Y de droite, il y aura les valeurs d'un compteur de goutte et un pluviomètres.


J'espère que j'ai été bien explicite explicite?
Vous avez compris qu'il aie deux ou 6 objets, il faut toujours que mes array 'labels' et 'data' ont les mêmes tailles.

S'il manque une date à un array/objet , donc aussi une valeur dans 'datasets->data', il faudrait ajouter un index dans 'labels' avec la date correspondante aux autres et ajouter la valeur de 0 dans datasets->data et que l'index de cette valeur correspond à l'index de 'labels'.

Ouha, voyez-vous? ai-je été claire? m'avez-vous compris? et dernière question, comment je peux donc comparer, fusionner et injecter une valeur dans une autre array en gardant une correspondance au niveau des index?

Milles mercis pour vos mumières
P.