Вложенные операторы if else работают только с первым оператором

#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) в цикле