for 循环和索引数组不起作用



我想创建一个二维数组,每个第一个元素都有一个索引号。

(我之前的问题让我走到了这一步>)

这有效:

$('#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));
});

编辑:我的最终工作版本(到目前为止):

var myArray  = [];
var rows = 5;
var cols = 2;
for (var i = 0; i < rows; i++) {
    myArray [i] = [];
    for (var j = 0; j < cols; j++) {
        if (j==0) myArray [i][j] = i;
        else myArray [i][j] = '';
    }
}
alert(JSON.stringify(myArray));

(r) 主要由 jfriend ;)

仍然不知道为什么无法在开头声明 2D 数组:myArray = [[]]

按照您当前的模式,它将像这样工作:

$('#create_indexed_array').click(function() {
    var myArray = [[]];
    for (var i = 0; i < 2; i++) {
        myArray[0][i] = ""; // create cols
    } 
    for (i = 1; i < 5; i++) {
        // create copy of first row in each other row
        myArray[i] = myArray[0].slice(0); 
    }
    for (i = 0; i < 5; i++) {
        myArray[i][0] = i; // set index
    }
    alert(JSON.stringify(myArray));
});​

工作演示:http://jsfiddle.net/jfriend00/vJDPp/

您必须记住的一件事是,分配数组会分配对该数组的引用,而不是副本,因此如果您希望数组的每个元素都不同,则必须物理上复制第一行以放入后续行中。 我还建议更改new_array的名称,因为这听起来很像函数名称,以至于让不知道它的人阅读代码变得混乱。


如果您只是尝试将 2D 数组初始化为所有 9,就像您的第一个代码示例中一样,那么这将简单得多:

$('#create_indexed_array').click(function() {
    var myArray = [];
    for (var i = 0; i < 5; i++) {
        myArray[i] = [];
        for (var j = 0; j < 2; j++) {
            myArray[i][j] = 9;
        }
    }
    alert(JSON.stringify(myArray));
});

或函数版本:

function create2DArray(lenX, lenY, initVal) {
    var myArray = [];
    for (var i = 0; i < lenX; i++) {
        myArray[i] = [];
        for (var j = 0; j < lenY; j++) {
            myArray[i][j] = initVal;
        }
    }
    return(myArray);
}

为什么不将它与嵌入式 for 循环一起使用?

For(var i = 0; i < 2; i++) {
     For(var j = 0; j < 5; j++) {
          new_array[i][j] = i; //set index
     }
}

这样,它就可以一次设置所有索引。您必须先声明它。

以前的问题是,您将其视为两个单独的数组、一个项目数组和该项目数组的数组。2D 数组是 1 个 2 维数组。

相关内容

  • 没有找到相关文章

最新更新