我在互联网上寻找一个简单的答案,但我似乎无法在任何地方找到它。我做了一个经度和经度的简单反向地理编码,我返回了巨大的结果对象。我从哪里去?这是我到目前为止所拥有的。目前,zipcode返回“undefined”。
geocoder.geocode( {'latLng' : event.latLng}, function(results, status) {
for(var i; i < results.length; i++){
for(var j=0;j < results[i].address_components.length; j++){
for(var k=0; k < results[i].address_components[j].types.length; k++){
if(results[i].address_components[j].types[k] == "postal_code"){
var zipcode = results[i].address_components[j].short_name;
}
}
}
}
});
答案 0 :(得分:7)
for(var i=0; i < results[0].address_components.length; i++)
{
var component = results[0].address_components[i];
if(component.types[0] == "postal_code")
{
console.log(component.long_name);
}
}
这就是我的工作。基本上它只是在第一个地址组件中搜索邮政编码,因为它包含所有信息。请记住,console.log()是你的朋友。
感谢可爱的ES6,移动浏览器支持,现在可以更轻松地完成,让我们来看一些更简单的方法。首先,我们可以简化循环
for(let component of results[0].address_components))
{
if(component.types[0] == "postal_code")
{
console.log(component.long_name);
}
}
或者我们可以使用find方法
let postalCode = results[0].address_components.find(function (component) {
return component.types[0] == "postal_code";
});
console.log(postalCode.long_name);
答案 1 :(得分:1)
发现这个简洁的函数(https://stackoverflow.com/users/638040/johann)作为另一个堆栈溢出问题的答案发布。
它会找到您要求的类型并将其返回。
function extractFromAdress(components, type){
for (var i=0; i<components.length; i++)
for (var j=0; j<components[i].types.length; j++)
if (components[i].types[j]==type) return components[i].long_name;
return "";
}
用法:
var postCode = extractFromAdress(results[0].address_components, "postal_code");
var country = extractFromAdress(results[0].address_components, "country");
答案 2 :(得分:0)
您的问题是zipcode变量是函数的局部变量。我在这个jsfiddle
上有一个有效的例子 var zipcode = null;
function testFunct (results, status) {
for(var i in results){
var result = results[i];
for(var j in result.address_components){
var address_component = result.address_components[j];
for(var k in address_component.types){
var addrtype = address_component.types[k];
if(addrtype == "postal_code"){
zipcode = results[i].address_components[j].short_name;
console.log(zipcode);
return;
}
}
}
}
}
答案 3 :(得分:0)
您的代码执行以下操作: 如果有两个或三个答案;它将最后一个存储在zipcode变量中。即使它未定义。 你应该检查邮政编码是否有效;而且你应该将它返回到你的邮政编码变量。 并在函数外定义变量;否则会卡在功能中。