実現したいこと
天気予報アプリforEachを使用したときに発生するエラーを解決して最高気温と最低気温を予測したい
前提
https://www.youtube.com/watch?v=6trGQWzg2AI&t=3689s
この動画を見て作っています。1:01:38 頃が該当するプログラムです。
また、動画主の方法ではAPI取得ができなくなっていたのでchatGPTに聞いたやり方でAPIを取得しています。説明が雑なので、分からないないことがあったら教えてください。
発生している問題・エラーメッセージ
p.js:52 TypeError: data.forEach is not a function
at showWeatherData (app.js:95:6)
at app.js:50:13
該当のソースコード
API取得
const API_KEY = 'ここに自分のAPIkeyがあります';
function getWeatherData() {
navigator.geolocation.getCurrentPosition((success) => {
let {latitude,longitude} = success.coords;
fetch(https://api.openweathermap.org/data/2.5/weather?lat=${latitude}&lon=${longitude}&exclude=hourly,minutely&appid=${API_KEY}&units=metric
)
.then(res => res.json())
.then(data => {
console.log(data);
showWeatherData(data);
})
.catch(error => console.error(error));
}, (error) => {
console.error(error);
});
}
getWeatherData();
ここで最低気温と最高気温を取得します
let otherDayForecast = ''
//このmainが配列じゃないのでforEachが使えないです。
data.main.forEach((day,idx) => {
if(idx == 0){
}else{
otherDayForecast += `
weatherforecastEl.innerHTML = otherDayForecast;
ソースコード
試したこと
エラー文の意味を調べました。forEachは.の前が配列じゃないと使えないとのことでした。他の方法での実行を検討しましたが、初心者なのでなかなかコードが書けませんでした。
Object
base
:
"stations"
clouds
:
{all: 0}
cod
:
200
coord
:
{lon: 139.6503, lat: 35.6762}
dt
:
1681989511
id
:
1862143
main
:
feels_like
:
21.29
humidity
:
70
pressure
:
1006
temp
:
21.28
temp_max
:
22.03
temp_min
:
19.9
[[Prototype]]
:
Object
name
:
"Horinouchi"
sys
:
{type: 2, id: 2001249, country: 'JP', sunrise: 1681934587, sunset: 1681982245}
timezone
:
32400
visibility
:
10000
weather
:
[{…}]
wind
:
{speed: 7.72, deg: 190}
[[Prototype]]
:
Object
見づらくてすいません。この中のmainの中の項目を取得したいのですが、配列じゃないので取得できません。
補足情報(FW/ツールのバージョンなど)
forEach以外の方法があるなら教えて頂けないでしょうか。
