我试图制作简单的天气应用程序,但我遇到了一些问题。 我使用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次。
答案 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++;
})
}