0

我已经在整个互联网上寻找一个简单的答案,但我似乎无法在任何地方找到一个。我对纬度和经度进行了简单的反向地理编码,然后返回了巨大的结果对象。我从那里去哪里?这是我到目前为止所拥有的。目前邮政编码返回“未定义”。

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;
                }
            }
        }
    }
});
4

4 回答 4

9
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);
于 2012-06-07T06:21:42.067 回答
2

发现这个简洁的函数(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");
于 2015-01-23T14:12:29.587 回答
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;
                }

            }
        }
    }

}
于 2012-06-07T06:17:26.380 回答
0

您的代码执行以下操作:例如,如果有两个或三个答案;它将最后一个连续存储在 zipcode 变量中。即使它是未定义的。您应该检查邮政编码是否有效;并且您应该将其返回到您的邮政编码变量。并在函数外定义变量;否则会卡在函数中。

于 2012-06-07T06:19:12.083 回答