2017-04-10 124 views
0

我寫了一個簡單的地理定位代碼,出於某種原因,中斷...請參考下面引用的代碼部分中的註釋,這些代碼顯示哪裏一切都很好,從哪個點它打破了。「for」循環後的JavaScript代碼中斷

var city = "Unknown"; 
var area = "Unknown"; 
var lr = w.results.length; 
for (var n = 0; n <= lr; n++) 
{ 
    var la = w.results[n].address_components.length; 
    for (var m = 0; m <= la; m++) 
    { 
     if (w.results[n].address_components[m].types[0] == "locality") 
     { 
      city = w.results[n].address_components[m].long_name; 
      break; 
     } 
     else if (w.results[n].address_components[m].types[0] == "administrative_area_level_2") 
     { 
      area = w.results[n].address_components[m].long_name; 
      break; 
     } 
    } //Whatever I put here, still works 
} //Now it breaks, and everything below never runs 
if (city == "Unknown") 
{ 
    city = area; 
} 

我在塔斯克(Android)運行它,並沒有得到任何提示的錯誤。但是,必須是一個愚蠢的錯誤。提前致謝!

+0

你可以創建一個小提琴嗎?或者至少爲我們提供w.results的價值。 – Matansh

+4

<=應更改爲< –

+0

您應該檢查變量la是不是未定義或0. – Banana

回答

0

你永遠不會離開for循環,這就是爲什麼它不起作用。

您可以在第二個for循環下面的if(condition) { break; }以下使用。 只需找到條件使用。

+0

你說的哪一個循環是永遠不會離開的?爲什麼會這樣? – 2017-04-10 07:45:03

+0

第一個for循環永遠不會被留下,所以它會一直運行,這就是代碼破壞的原因。 –

0

您可以使用標籤突破嵌套for循環。 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label

另一種方法是在斷開之前將m變量設置爲lr + 1,但在繼續之前仍然會運行一次外循環的其餘部分。

var city = "Unknown"; 
var area = "Unknown"; 
var lr = w.results.length; 
outer: 
for (var n = 0; n <= lr; n++) 
{ 
    var la = w.results[n].address_components.length; 
inner: 
    for (var m = 0; m <= la; m++) 
    { 
     if (w.results[n].address_components[m].types[0] == "locality") 
     { 
      city = w.results[n].address_components[m].long_name; 
      break outer; 
     } 
     else if (w.results[n].address_components[m].types[0] == "administrative_area_level_2") 
     { 
      area = w.results[n].address_components[m].long_name; 
      break outer; 
     } 
    } //Whatever I put here, still works 
} //Now it breaks, and everything below never runs 
if (city == "Unknown") 
{ 
    city = area; 
}