从 Google Places API 响应中获取地址组件的最佳方式

Best way to get address components from Google Places API response

我正在实施 Google 地点表单,用户将在其中输入 his/her 地点。该位置可以是完整地址或只是一个城市。

我想获取用户提供的地址的每个单独组成部分。获取每个组成部分的最佳方式是什么,即地址、城市、州、邮政编码和国家/地区。

在下面的代码中,我得到的组件似乎是一个数组。我必须循环遍历它还是有直接的方法让我访问每个组件?

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&libraries=places"></script>
<script type="text/javascript">
        google.maps.event.addDomListener(window, 'load', function () {
            var places = new google.maps.places.Autocomplete(document.getElementById('location'));
            google.maps.event.addListener(places, 'place_changed', function () {
                var place = places.getPlace();
                var components = place.address_components;


            });
        });
</script>

在此处查找 google 中的示例:

var address = '';
    if (place.address_components) {
      address = [
        (place.address_components[0] && place.address_components[0].short_name || ''),
        (place.address_components[1] && place.address_components[1].short_name || ''),
        (place.address_components[2] && place.address_components[2].short_name || '')
      ].join(' ');
}

这是创建函数:Vancouver Greater Vancouver BC(来自下面的 link)。

因此您可以像 array 一样直接访问每个 place.address_components。 然后做你想做的事。 这是此示例的 link: https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete

循环可能是最简单的。没有直接的方法可以直接跳到例如state 地址组件(如果存在的话),它是一个简单的数组。

您还可以将数组处理成允许按类型直接查找的内容:

var components_by_type = {};
for (var i = 0; i < place.address_components.length; i++) {
  var c = place.address_components[i];
  components_by_type[c.types[0]] = c;
}

console.log(components_by_type['state'].short_name);

不过,如果您想在每个组件中处理比第一种更多的类型,那将变得有点复杂。

从 place.address_components 您将获得地址组件数组,因此您可以按以下顺序与数组索引分开:

let postalCode =  place.address_components[place.address_components-1]>

let countryName =  place.address_components[place.address_components-2]

let stateName =  place.address_components[place.address_components-3]

let districtName = place.address_components[place.address_component-4]

let cityName  place.address_components[place.address_components-5]

等等...