Salut tout le monde

Ouais je sais, il y a des doublons mais j'ai encore du mal. Mon objectif est donc de parcourir la liste JSON que j'obtiens en utilisant une API externe et d'extraire les valeurs dont j'ai besoin. Les valeurs dont j'ai besoin sont date et avgtempC qui sont stockées dans 'weather'

La liste ressemble à ceci:

{
"data":
{
    "weather":
    [
        {
            "date": "2020-04-13",
            "astronomy": [
                {
                    "sunrise": "06:29 AM",
                    "sunset": "08:22 PM",
                    "moonrise": "02:24 AM",
                    "moonset": "09:53 AM",
                    "moon_phase": "Waning Gibbous",
                    "moon_illumination": "53"
                }
            ],
            "maxtempC": "7",
            "maxtempF": "44",
            "mintempC": "4",
            "mintempF": "40",
            "avgtempC": "6",
            "avgtempF": "43",
            "totalSnow_cm": "0.0",
            "sunHour": "11.6",
            "uvIndex": "4",
            "hourly": [
                {
                    "time": "0",
                    "tempC": "8",
                    "tempF": "47",
                    "windspeedMiles": "19",
                    "windspeedKmph": "30",
                    "winddirDegree": "65",
                    "winddir16Point": "ENE",
                    "weatherCode": "122"
                }]

        },
        {
            "date": "2020-04-14",
            "astronomy": [
                {
                    "sunrise": "06:27 AM",
                    "sunset": "08:24 PM",
                    "moonrise": "03:24 AM",
                    "moonset": "10:48 AM",
                    "moon_phase": "Last Quarter",
                    "moon_illumination": "46"
                }
            ],
            "maxtempC": "11",
            "maxtempF": "52",
            "mintempC": "3",
            "mintempF": "37",
            "avgtempC": "7",
            "avgtempF": "45",
            "totalSnow_cm": "0.0",
            "sunHour": "11.6",
            "uvIndex": "5",
            "hourly": [
                {
                    "time": "0",
                    "tempC": "4",
                    "tempF": "39",
                    "windspeedMiles": "4",
                    "windspeedKmph": "6",
                    "winddirDegree": "121",
                    "winddir16Point": "ESE",
                    "weatherCode": "116"
                }]
        }]
}
}

J'obtiens une sortie correcte lorsque j'accède directement à ces valeurs, comme ceci:

 let forecast = response['data']['weather'][0];
 let output = `${forecast['date']} : ${forecast['avgtempC']}°C`;

Mais ce que je veux, c'est parcourir la liste et obtenir toutes les dates et la température pour chaque jour. J'ai essayé ceci:

     for (let k in forecast) {
      if (forecast.hasOwnProperty(k)) {
        output += (`[` + forecast[k] + `]` + `,`);     
      }
    }

Et

    for (let k in forecast) {
        output += (`[` + forecast[k] + `]` + `,`);     
    }

Mais ce que je reçois, c'est:

[2020-04-13],[[object Object]],[7],[44],[4],[40],[6],[43],[0.0],[11.6],[4],[object Object]

Et pour une raison quelconque, il ne lit que les détails de la première date (13/04/2020), mais pas les deux.

J'ai aussi essayé

    for (let k in forecast) {
        output += (`[` + forecast[k].date + `]` + `,`);     
    }

Mais il renvoie des objets non définis. Y a-t-il quelque chose qui me manque ou est-ce juste la boucle qui est incorrecte, j'ai passé beaucoup de temps à essayer de comprendre cela mais sans aucune chance. J'apprécierais toute aide les gars, merci!

0
starGazer 13 avril 2020 à 15:41

2 réponses

Meilleure réponse

Vous parcourez actuellement les attributs du premier élément du tableau (response['data']['weather'][0]). Si vous souhaitez parcourir tous les éléments du tableau, vous ne devez pas accéder au premier élément ([0]). En outre, for...in < / a> boucle sur les propriétés de l'objet. Vous souhaitez utiliser {{X3} } qui boucle sur les objets itérables (comme les tableaux).

const response = {"data":{"weather":[{"date":"2020-04-13","astronomy":[{"sunrise":"06:29 AM","sunset":"08:22 PM","moonrise":"02:24 AM","moonset":"09:53 AM","moon_phase":"Waning Gibbous","moon_illumination":"53"}],"maxtempC":"7","maxtempF":"44","mintempC":"4","mintempF":"40","avgtempC":"6","avgtempF":"43","totalSnow_cm":"0.0","sunHour":"11.6","uvIndex":"4","hourly":[{"time":"0","tempC":"8","tempF":"47","windspeedMiles":"19","windspeedKmph":"30","winddirDegree":"65","winddir16Point":"ENE","weatherCode":"122"}]},{"date":"2020-04-14","astronomy":[{"sunrise":"06:27 AM","sunset":"08:24 PM","moonrise":"03:24 AM","moonset":"10:48 AM","moon_phase":"Last Quarter","moon_illumination":"46"}],"maxtempC":"11","maxtempF":"52","mintempC":"3","mintempF":"37","avgtempC":"7","avgtempF":"45","totalSnow_cm":"0.0","sunHour":"11.6","uvIndex":"5","hourly":[{"time":"0","tempC":"4","tempF":"39","windspeedMiles":"4","windspeedKmph":"6","winddirDegree":"121","winddir16Point":"ESE","weatherCode":"116"}]}]}};

for (const forecast of response.data.weather) {
  console.log(`${forecast.date} : ${forecast.avgtempC}°C`);
}
0
3limin4t0r 13 avril 2020 à 13:03

Merci beaucoup @ 3limin4t0r, j'ai également essayé de le résoudre moi-même et cela a fonctionné, ce qui a fonctionné était

    for(let i = 0; i < forecast.length; i++){
        output += (`[` + forecast[i].date + `]`); 
        output += (`[` + forecast[i].avgtempC + `]`);
    }

Mais dans ce cas, j'ai dû changer les prévisions pour

let forecast = response['data']['weather'];
0
starGazer 13 avril 2020 à 13:20