【问题标题】:closure in for-loop > different tries failedfor循环中的关闭>不同的尝试失败
【发布时间】:2012-11-30 06:49:55
【问题描述】:

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

编辑:

到目前为止很多..

@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));

});

【问题讨论】:

  • 你为什么要做这么多的变量转换和不必要的函数创建?保持简单,你应该得到答案
  • 好吧...那你为什么不直接使用“我想做什么”代码块呢?我承认,我对您尝试使用您尝试的代码块到底想要实现什么感到有些困惑。
  • 我不确定您所说的“它总是将最后一个循环的值 ('i') 放入单元格中”或“它们似乎仍然引用引用'i'”是什么意思”。使用您的确切代码,我让它输出正确的数字...jsfiddle.net/jonhopkins/sC9T5/1

标签: javascript loops for-loop scope closures


【解决方案1】:

试试这个

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

【讨论】:

    【解决方案2】:

    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, ""];
    

    【讨论】:

    • 如果这回答了您的问题,请接受,如果没有,请询​​问:-)
    猜你喜欢
    • 1970-01-01
    • 2020-07-30
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多