Set*_*eth 15 javascript json google-maps
我正在使用Google Map API从邮政编码查找中检索城市+州/地区信息.问题是,在某些情况下,邮政编码查找不会检索城市名称.一个例子是92625(美国).
var g = new GClientGeocoder();
g.setBaseCountryCode('US');
g.getLocations('92625', function(response){
if (response) {
var place = response.Placemark[0];
var state = place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
var city = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
GLog.write("City = "+city+" : State/Region = "+state+" : Country = " + g.getBaseCountryCode());
}
});
Run Code Online (Sandbox Code Playgroud)
在某些情况下,如上所述,结果中不会有城市名称,因此城市将存在未定义的错误,因为关键位置不存在.此错误会阻止脚本的其余部分运行.
我能够通过...来弥补它
if (place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality != null)
var city = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
else
var city = '';
Run Code Online (Sandbox Code Playgroud)
...但这让我对其他键的类似错误感到偏执.例如:如果未定义AdministrativeArea,则上述IF语句也会导致未定义的错误.那么我应该检查每个Key/Node是否存在?似乎是一个混乱的方法,因为其中一些键是5级以上的深度...是否有一个更容易的方法,也许一些我不熟悉的JQuery方法?
或者,你可以创建一个函数,它给你默认值:
function valueOrDefault(val, def) {
if (def == undefined) def = "";
return val == undefined ? def : val;
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
var place = response.Placemark[0];
var state = valueOrDefault(place.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName);
var city = valueOrDefault(place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName);
Run Code Online (Sandbox Code Playgroud)
就我个人而言,我觉得它写得比p00ya的提议更好一点,虽然它在未定义的对象中有点笨拙地摆弄...但是可以将其改为:
function drill(p, a) {
a = a.split(".");//add this
for (i in a) {
var key = a[i];
if (p[key] == null)
return '';
p = p[key];
}
return p;
}
var obj = {foo:{bar:{baz:"quux"}}};
var s = drill(obj, "foo.bar.baz"));//and you can use a simple property chain
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38089 次 |
| 最近记录: |