“for-loop”中的闭包>不同尝试失败

时间:2012-12-12 14:32:22

标签: javascript loops for-loop scope closures

我想在每个第一个元素中创建一个带有索引号的二维数组。

编辑:

到目前为止很多...

@carl:我做了很多功能创作只是为了表明我做过的尝试......

jonhopkins的想法产生了这个:

这有效:

$('#create_indexed_array').click(function() {

    var new_array = [[9,9],[9,9],[9,9],[9,9],[9,9]];

    for (var i = 0; i < 5; i++) {

        new_array[i][0] = i;

    }

    alert(JSON.stringify(new_array));

});

但这不起作用:

$('#create_indexed_array').click(function() {


    var new_array = new Array(new Array());

    for (var i = 0; i < 2; i++) {
        new_array[0][i] = ""; // create cols
    } 

    for (var i = 1; i < 5; i++) {
        new_array[i] = new_array[0]; // create rows
    }

    for (var i = 0; i < 5; i++) {
        new_array[i][0] = i; // set index

    }

    alert(JSON.stringify(new_array));

});

2 个答案:

答案 0 :(得分:0)

尝试这样做

for (var i = 0; i < $('#rows').val(); i++) {
    new_array[i][0] = i;
}

'i'的定义可以在main函数的开头完成,因为for循环没有闭包。 因此,当循环结束时,'i'var仍然可用。 你可以阅读这本书http://shop.oreilly.com/product/9780596517748.do

答案 1 :(得分:0)

JavaScript中没有二维数组,只有数组对象可能包含其他数组对象(还有其他任何东西)。 new Array(new Array());不符合您的期望。顺便说一句,您可以使用空数组文字[]而不是显式调用构造函数。

var new_array = [];
for (var i=0; i<5; i++) {
    // create and add a new subarray explicitly:
    new_array[i] = [];
    // add a value to that subarray:
    new_array[i][0] = i;
    // add other values to the subarray:
    new_array[i][1] = "";
}
// new_array now looks like this:
[[0, ""], [1, ""], [2, ""], [3, ""], [4, ""]]

// You might shorten the whole code by using stuffed literals for the sub arrays:
for (var new_array=[], i=0; i<5; i++)
    new_array[i] = [i, ""];