JQuery new Date()和循环

时间:2016-12-07 22:43:44

标签: javascript jquery date datetime

我试图制作简单的天气应用程序,但我遇到了一些问题。 我使用openweathermap.org中的API获取最小和最大临时值。 这是我的关键:

http://api.openweathermap.org/data/2.5/forecast/daily?callback=fetchData&q=London&appid=redacted&units=metric&_=1481140918291

现在,对于我使用的API,他们不提供日期,所以我尝试使用此代码自行完成:

forecast.list.forEach(function(forecastEntry, index, list){

    today = new Date();

    html += '<p>'+ today + ': ' + forecastEntry.temp.min + '< ' + forecastEntry.temp.max + '</p>'

})

现在这得到了我的一些输出:

Wed Dec 07 2016 22:29:27 GMT + 0100(中欧标准时间):9.62&lt; 12.58

Wed Dec 07 2016 22:29:27 GMT + 0100(中欧标准时间): - 6.73&lt; 5.66

Wed Dec 07 2016 22:29:27 GMT + 0100(中欧标准时间): - 7.95&lt; 9.17

Wed Dec 07 2016 22:29:27 GMT + 0100(中欧标准时间): - 6.34&lt; 11.77

Wed Wed 07 2016 22:29:27 GMT + 0100(中欧标准时间): - 2&lt; 14.5

Wed Dec 07 2016 22:29:27 GMT + 0100(中欧标准时间):1.72&lt; 13.46

我尝试过这样的事情:

for (i=0;i<8;i++) {
        var today = new Date();
        today.setDate(today.getDate()+i);
        console.log(today);
        html += '<p>' + today + forecastEntry.temp.min + '< ' + forecastEntry.temp.max + '</p>'
}

这解决了日常问题,但由于我的forEach循环,它多次重复我的整个输出。我是JS的新手,我真的无法解决这个问题。任何帮助,将不胜感激。这是我整个代码的JSBIN:http://jsbin.com/lafurih/edit?html,js,output

编辑:澄清我的问题。输出显示我想要的8天,但它显示了8次。

1 个答案:

答案 0 :(得分:2)

错误是你将for循环放在foreach循环中。这应该有效:http://jsbin.com/hiyupisivi/edit?html,js,output

我删除了for循环,并将I变量放在foreach循环之外,然后在每次循环运行时递增它。

最后,该功能将如下所示:

function fetchData (forecast) {
    console.log(forecast)
    var html = '',
    cityName = forecast.city.name,
    country = forecast.city.country,
    cnt = forecast.cnt
    var i = 0;

    html += '<h3> Weather Forecast for ' + cityName + ', ' + country + ', ' + cnt + ' days</h3>'
    forecast.list.forEach(function(forecastEntry, index, list){
            var today = new Date();
            today.setDate(today.getDate()+i);
            console.log(today);
            html += '<p>' + today + forecastEntry.temp.min + '< ' + forecastEntry.temp.max + '</p>'
            i++;
    })
}