【发布时间】:2015-10-06 11:32:20
【问题描述】:
我有 2 个暗淡的数组,看起来像这样:
var a = [[1,2,3],[4,5,6],[7,8,9]];
我想写一个迭代器,每次调用它都会返回一个值。
iterator(); //returns 1
iterator(); //returns 2
iterator(); //returns 3
我试过这样的方法:
function iterator() {
var a = [[1,2,3],[4,5,6],[7,8,9]];
var i, j;
return function() {
for (var i = 0; i < a.length; i++) {
var b = a[i];
for (var j = 0; j < b.length; j++) {
return a[i][j];
}
}
}
};
var a = iterator();
a(); //1
a(); //1
a(); //1
它总是返回我第一个元素。
我可以试试这个:
function iterator() {
var a = [[1,2,3],[4,5,6],[7,8,9]];
var i = 0, j = 0;
return function() {
for (; i < a.length; i++) {
var b = a[i];
for (; j < b.length; j++) {
return a[i][j];
}
}
}
};
也不行。
但如果我试试这个:
function test() {
var a = [1,2,3,4,5], i = 0;
return function() {
while (i < a.length) {
return a[i++];
}
}
}
var a = test();
a(); //1
a(); //2
a(); //3
它工作正常。
这里有什么区别?如何使 for 循环工作?
对我来说另一个明显的问题是界限。到达数组边界时应该如何停止?
【问题讨论】:
-
每次调用函数时都使用 for 循环初始化
i=0 , j=0.. -
@Haketo 进行了编辑,检查我的第二次尝试迭代器。也不行。
-
因为你从不增加i和j,所以它会在之前执行return语句
-
为什么不直接折叠数组?
-
@epascarello 我用它作为二维结构来填充网格。
标签: javascript arrays multidimensional-array iterator closures