2017-04-10 129 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; 
}