为什么即使条件“ if”为真,我也会从“ else if”获得结果

时间:2018-09-24 01:12:44

标签: javascript json object google-api

Google反向地理编码为我提供了这样的结果

this._sub2 = this.props.navigation.addListener(
      'didBlur',
      () => {
        console.log('in didBlur for HomeScreen');
        this.setState({info: this.props.navigation.getParam('data', '')})
        this.setState({showRespondTo: false});
      }
);

以下是用于获取“邻居”长名称的结果的代码:

results: [
{address_components: [
{long_name: "New York",
short_name: "NY",
types: ["neighborhood"]},]

{address_components: [
{long_name: "London",
short_name: "LN",
types: ["sublocality_level_1"]},]}]

如果第一个条件为真,为什么会显示伦敦的结果?它应该控制纽约,还是我弄错了?

1 个答案:

答案 0 :(得分:0)

因为console.log(storableLocation)在两个循环之外,所以您看到的是分配给var storableLocation的第二个值。您没有看到分配给变量的第一个值,因为到console.log时,循环已经完成,并在else if语句中将storableLocation重新分配给了伦敦。

相反,您应该执行以下操作:

var results = [ {address_components: [
{long_name: "New York",
short_name: "NY",
types: ["neighborhood"]}]},

{address_components: [
{long_name: "London",
short_name: "LN",
types: ["sublocality_level_1"]}]}]

loop1:
for (i = 0; i < results.length; i++) {
   var storableLocation;
   loop2:
   for (var acd = 0; acd < results[i].address_components.length; acd++) {
       var fff =  results[i].address_components[acd];
       if(fff.types.includes("neighborhood")) {
          storableLocation = fff.long_name;
          console.log(storableLocation)
          break loop1;
       }
       else if (fff.types.includes("sublocality_level_1")){
          storableLocation = fff.long_name;
       }
   }
}