2016-03-03 64 views
-1

我有一个问题在我的Google Maps API项目中循环多个数组。数组For循环导致无限循环

我在marker数组中有一个类别数组,我希望能够根据用户在下拉菜单中选择的内容对它们进行排序。

,当他们选择一个值,下面的函数运行:

filterMarkers = function (category) { 
    for (i = 0; i < markers1.length; i++) { 
     marker = gmarkers1[i]; 
     console.log(marker.category); 
     for(i = 0; i < marker.category.length; i++) { 
      // If is same category or category not picked 
      if (marker.category[i] == category || category.length === 0) { 
       marker.setVisible(true); 
      } 
      // Categories don't match 
      else { 
       marker.setVisible(false); 
      } 
     } 
    } 
} 

但不是每个项目比较数组来选择里面有什么,它只是不断循环。

JS小提琴: http://jsfiddle.net/japaneselanguagefriend/t3xaj1j5/1/

回答

3

您使用的是两种不同的回路相同的全局计数器(i)。

JS对var声明使用函数级范围,但允许您使用变量而不会因为遗留原因而声明它。你的两个循环都使用i而不声明它,所以你正在使用一个全局变量。

在ES5,您可以修复由两个循环声明计数器和改变一个用另一个变量,如:

for (var i = 0; i < foo; ++i) { 
    for (var j = 0; j < bar; ++j) { 
    ... 
    } 
} 

最新的语言版本增加了块作用域的变量,但因为你的循环是嵌套的,你还需要不同的名称:

for (let i = 0; i < foo; ++i) { 
    for (let j = 0; j < bar; ++j) { 
    ... 
    } 
} 

无论哪种方式,一定要声明变量(与varlet,这取决于可用的语言水平),所以他们不会泄漏到了全球范围。您的脚本头部应该有一个"use strict";,这将全面防止全局/未声明的变量。