数组For循环导致无限循环
问题描述:
我有一个问题在我的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/
答
您使用的是两种不同的回路相同的全局计数器(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) {
...
}
}
无论哪种方式,一定要声明变量(与var
或let
,这取决于可用的语言水平),所以他们不会泄漏到了全球范围。您的脚本头部应该有一个"use strict";
,这将全面防止全局/未声明的变量。