我觉得真正阻碍我发挥能力的事情之一是不了解如何有效地使用数组和对象。我得到的基础知识,但当涉及到需要一个特定的键和值在一个复杂的对象,我迷路了。所以在这个例子中,我从openweathermap获得一个对象。对象看起来像这样:
{
"coord":{
"lon":-83.15,
"lat":41.51
},
"weather":[
{
"id":721,
"main":"Haze",
"description":"haze",
"icon":"50d"
}
],
"base":"cmc stations",
"main":{
"temp":287.05,
"pressure":1024,
"humidity":47,
"temp_min":286.15,
"temp_max":288.15
},
"wind":{
"speed":5.1,
"deg":50,
"gust":9.3
},
"clouds":{
"all":40
},
"dt":1443728852,
"sys":{
"type":1,
"id":1435,
"message":0.0115,
"country":"US",
"sunrise":1443699000,
"sunset":1443741203
},
"id":5165215,
"name":"Oak Harbor",
"cod":200
}
我知道如何使用each()
遍历数组$.getJSON( "http://api.openweathermap.org/data/2.5/weather?zip=43452,us&APPID=6c62bbbc17614bb4c0cae3095e0b5a89", function(obj) {
$.each(obj.main, function(key, val) {
//do something//
});
});
但是如果我想访问对象中更深的东西,比如我特别想要温度值,例如,然后将其分配给一个全局变量以在脚本外部使用。我想不需要一个具体的解决方案,但更多的是一个好的坚实的解释如何使用这样一个有点复杂的对象。
谢谢你的帮助!
所以我现在有这个,但值没有传递出函数?
$.getJSON( "http://api.openweathermap.org/data/2.5/weather?zip=43452,us&APPID=6c62bbbc17614bb4c0cae3095e0b5a89", function(obj) {
currentTemp = (obj.main.temp * 9/5 - 459.67);
alert(currentTemp);
});
alert(currentTemp);
$.getJSON( "http://api.openweathermap.org/data/2.5/weather?zip=43452,us&APPID=6c62bbbc17614bb4c0cae3095e0b5a89", function(obj) {
$.each(obj.main, function(key, val) {
if(val.temp)
{
// do what you want with the temperature
}
});
});
你可以这样写:
$.getJSON( "http://api.openweathermap.org/data/2.5/weather?zip=43452,us&APPID=6c62bbbc17614bb4c0cae3095e0b5a89", function(obj) {
$.each(obj.main, function(key, val) {
your_global_var = val.temp;
});
});
或者如果你想获得更多信息。
$.getJSON( "http://api.openweathermap.org/data/2.5/weather?zip=43452,us&APPID=6c62bbbc17614bb4c0cae3095e0b5a89", function(obj) {
$.each(obj, function(key, val) {
your_global_var = val.main.temp;
});
});
无论如何,我不认为需要$.each
循环,因为你可以这样做:
$.getJSON( "http://api.openweathermap.org/data/2.5/weather?zip=43452,us&APPID=6c62bbbc17614bb4c0cae3095e0b5a89", function(obj) {
your_global_var = obj.main.temp;
});