#javascript #if-statement #nested #boolean
#javascript #if-statement #вложенные #логическое
Вопрос:
У меня возникла проблема с вложенными операторами if else. В этом выпуске он выполняет только первый оператор if и пропускает все остальные, когда я хочу, чтобы каждый оператор выполнялся. Оператор else if работает нормально, когда внутри него ничего не вложено, но когда я вкладываю дополнительные операторы if else, кажется, работает только первый. Вот мой код javascript:
const apiURL2 = "https://api.openweathermap.org/data/2.5/forecast?id=5604473amp;appid=6d1d830097a2c0bac1aba2337d0139e6";
fetch(apiURL2).then((response) => response.json()).then((jsonObject) => {
const list = jsonObject['list'];
console.log(jsonObject);
for ( let i = 0; i < 5; i ){
let divForecastData = document.querySelector('div.weather-forecast-wrapper');
let temp1 = document.createElement("div");
let tempday = document.createElement("p");
let temperature = document.createElement("p");
let icon = document.createElement("i");
temperature.className = "temp";
tempday.className = "weekday";
temp1.className = "day";
if (i == 0){
tempday.textContent = "Sat";
temperature.textContent = list[i].main.temp;
if (list[i].weather[i].main = "Clear"){
icon.className = "worked"
}
else {
icon.className = " still worked"
}
}
else if (i == 1){
tempday.textContent = "Sun";
var far = list[i].main.temp
var kel = far * (9/5) - 459.67;
temperature.textContent = Math.round(kel) "℉";
if (list[i].weather[i].main = "Clear"){
icon.className = "worked"
}
else {
icon.className = " still worked"
}
}
else if (i == 2){
tempday.textContent = "Mon";
temperature.textContent = list[i].main.temp;
}
else if (i == 3){
tempday.textContent = "Wed";
temperature.textContent = list[i].main.temp;
}
else{
tempday.textContent = "Thu";
temperature.textContent = list[i].main.temp;
}
divForecastData.appendChild(temp1);
temp1.appendChild(tempday);
temp1.appendChild(icon);
temp1.appendChild(temperature);
}
});
есть предложения?
Ответ №1:
Сравнения кодируются с ==
помощью or ===
…
Так что это нехорошо. if (list[i].weather[i].main = "Clear")
Но list[i].weather[i]
чего-то не существует, я знаю, потому что есть большое красное сообщение, которое появляется на консоли просто при запуске кода. Возможно, вы хотели использовать list[i].weather[0]
.
Вот исправленный фрагмент кода
const apiURL2 = "https://api.openweathermap.org/data/2.5/forecast?id=5604473amp;appid=6d1d830097a2c0bac1aba2337d0139e6";
fetch(apiURL2).then((response) => response.json())
.then((jsonObject) => {
let divForecastData = document.querySelector('div.weather-forecast-wrapper');
console.log(jsonObject);
const list = jsonObject['list'];
for ( let i = 0; i < 5; i ){
const item = list[i];
let temp1 = document.createElement("div");
let tempday = document.createElement("p");
let temperature = document.createElement("p");
let icon = document.createElement("i");
temperature.className = "temp";
tempday.className = "weekday";
temp1.className = "day";
if (i == 0){
tempday.textContent = "Sat";
temperature.textContent = item.main.temp;
if (item.weather[i].main = "Clear"){
icon.className = "worked"
} else {
icon.className = " still worked"
}
} else if (i == 1){
tempday.textContent = "Sun";
var far = item.main.temp
var kel = far * (9/5) - 459.67;
temperature.textContent = Math.round(kel) "℉";
if (item.weather[0].main === "Clear"){
icon.className = "worked"
} else {
icon.className = " still worked"
}
} else if (i == 2){
tempday.textContent = "Mon";
temperature.textContent = item.main.temp;
} else if (i == 3){
tempday.textContent = "Wed";
temperature.textContent = item.main.temp;
} else{
tempday.textContent = "Thu";
temperature.textContent = item.main.temp;
}
divForecastData.appendChild(temp1);
temp1.appendChild(tempday);
temp1.appendChild(icon);
temp1.appendChild(temperature);
}
});
<div class='weather-forecast-wrapper'></div>
Комментарии:
1. Красивые. Сработало хорошо, и вы указали, что я сделал неправильно, я на самом деле не заметил, что использовал присваивание вместо сравнения. Большое вам спасибо.
2. Вы также допустили ошибку с порядком дней и, глядя на результат API, дни, которые вы использовали, неверны, вы должны получить дату
new Date(entry.dt*1000)
в цикле