11488 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

avec une API (OpenWeatherMap) je récupère un objet qui contient 5 ou 6 jours (suivant l'heure).
Chaque journée pleine a 8 entrées (de 00:00 à 21:00)
je voudrais récupérer la liste des jours (champ date) sans les doublons, un peu comme on peut le faire en MySql avec une requête SELECT DISTINCT

c'est possible avec javascript??

merci et bonne rentrée à tous

upload/1693593133-40948-objet-js.jpg
J'ai déjà trouvé une solution, c'est un peu tordu mais ça marche...




    const forecastDate1 = forecastSet[0]['date'];

    const dateSet = [forecastDate1];
    let dateCriteria = forecastDate1;
    Object.values(forecastSet).forEach( (entry, index) => {

      let dateForecast = entry.date;

      if (dateForecast != dateCriteria) {
        dateSet.push(dateForecast);
        dateCriteria = dateForecast;
      }

    });


-
forecastSet représente le gros objet renvoyé par l'API
Je crée un tableau dateSet et j'y entre déjà la première date.
Je crée une variable dateCriteria pour stocker les changement de date, initialisée avec la première date.
Je parcours mon objet, et dès que la date change [ if (dateForecast != dateCriteria) ]
j'ajoute cette nouvelle date au tableau dateSet et j'actualise la variable dateCriteria.

Ça marche, j'obtiens bien la liste unique des dates et je vais pouvoir parcourir ce tableau pour filtrer le gros objet et séparer mes journées...

Si quelqu'un connait une meilleure solution... je suis preneur..

-
upload/1693595279-40948-objet-js-2.jpg
Hello !

En javascript, il existe le conteneur Set, qui permet de stocker un ensemble d'éléments uniques : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Set.

Du coup, ton problème peut être résolu avec les étapes suivantes :
1. Extraire une le champ date de chaque élément de la liste que te renvois l'API OpenWeatherMap.
2. Ajouter toutes ces dates à un Set.
3. Re-convertir ce Set en Array.

En une ligne, ça donne ça :
// const forecastData = [...]
const dates = [...new Set(forecastData.map((el) => el.date))]
Meilleure solution
@GuillaumeBauer : voilà une solution à laquelle je ne m'attendais pas !
Vos interventions sont toujours un plaisir à lire.
GuillaumeBauer a écrit :
Hello !

En javascript, il existe le conteneur Set,

Du coup, ton problème peut être résolu avec les étapes suivantes :
1. Extraire une le champ date de chaque élément de la liste que te renvois l'API OpenWeatherMap.
2. Ajouter toutes ces dates à un Set.
3. Re-convertir ce Set en Array.




alors là je dis ... "fantastique"

voici mon code initial pour créer dateSet:


    const dateSet = [forecastDate1];
    let dateCriteria = forecastDate1;
    Object.values(forecastSet).forEach( (entry, index) => {
      let dateForecast = entry.date;
      if (dateForecast != dateCriteria) {
        dateSet.push(dateForecast);
        dateCriteria = dateForecast;
      }
    });


et maintenant grâce à toi, je fais tout en une seule ligne:


    const dateSet = [...new Set(Object.values(forecastSet).map((el) => el.date))]



J'avais déjà entendu parler de Set mais je m'étais toujours demandé à quoi ça servait, maintenant je vois mieux...

merci à toi Guillaume