如何在Javascript中创建二维数组

3

我试图用javascript创建一个二维数组,最终可以将其放入嵌套循环中以提取X/Y信息。

这里我做错了什么?


function createMatrix(){
    let colcount = 0;
    let rowcount = 0;

    var pixel_array = new Array();
    var y_array = new Array();

    for (var i = 0; i <= 100; i++){
        var checker = (i+1) % 10;
        if(checker == 0){
            y_array.push(i);
            //create new X array
            pixel_array[rowcount] = [];
            //push column data into row array
            pixel_array[rowcount].push(y_array);
            //create new Y array 
            var y_array = new Array();
            //increment row counter
            //reset column counter
            parseInt(rowcount++);
            colcount = 0;
        }else{
            y_array.push(i);
            parseInt(colcount++);
        }
    }

    //sanity check: spit out the matrix
    for (var x=0; x<10;x++){
        for(var y=0; y<10; y++){
            console.log(pixel_array[x][y]);
        }
    }

}


我本期望调用特定的X/Y“坐标”并从那个“单元格”提取信息。然而,我得到了一个错误,基本上说数组的[Y]部分未定义。
通过查看console.log和console.table - 我可以看到X数组已经填充,但与我期望的不同,它不是另一个数组,只是一串数字列表。
编辑:更具体地说,我的目标是从单个For循环中创建一个2D数组。下面的嵌套for循环是代码示例,展示我希望如何调用“单元格”[X][Y]。
1个回答

3

这段代码:

pixel_array[rowcount] = [];
//push column data into row array
pixel_array[rowcount].push(y_array);

创建一个新的数组,将其存储在pixel_array[rowcount]中,然后将y_array推入其中。这时你就有了一个包含一个数组(通过[]创建的数组)和一个数组(y_array)的数组pixel_array。 这更接近于一个三维数组而不是二维数组。
可能有点过于复杂化了。我无法确定您想要的最终数组是什么,因此这里提供了一个例子,创建了一个包含数字1-12的3x4“二维数组”(实际上它不是¹,它是一个数组的数组,但是……),请参见注释:

// Create the outer array
var array = [];
for (var x = 0; x < 4; ++x) {
    // Create the inner array for this row and store it in `array[x]`
    var inner = array[x] = [];
    for (var y = 0; y < 3; ++y) {
        // Set the value of the inner array at `y`,
        // which is also `array[x][y]`
        inner[y] = (x * 3) + y + 1;
    }
}
console.log(array);
.as-console-wrapper {
    max-height: 100% !important;
}


在您的评论中,您说:

我想从单个For循环中创建一个2D数组。 因此,在我的示例中,我循环0-99,预期结果是一个10x10的“矩阵”(0-9,10-19,20-29等)。

这里是一个做到这一点的示例:

// Create the outer array
var array = [];
var inner;
for (var n = 0; n < 100; ++n) {
    // Time to create a new inner array?
    if (n % 10 === 0) { // It's important that this condition is true on the first loop iteration
        inner = [];
        array.push(inner);
    }
    // Add this `n` to the current inner array
    inner.push(n);
}
console.log(array);
.as-console-wrapper {
    max-height: 100% !important;
}


¹ "它实际上不是,而是一组数组" - JavaScript没有多维数组。它有可以包含其他数组的数组。对于许多目的而言,这种区别并不重要,但这意味着(在其他方面)数组可以是 jagged:外部数组中的所有条目都不必具有相同的长度。(实际上,它们甚至不必是数组。)


感谢回复T.J.,我现在意识到我在问题上应该更具体:我想从单个For循环中创建一个二维数组。因此,在我的示例中,我正在循环0-99,期望的结果是一个10x10的“矩阵”(0-9,10-19,20-29等)。最终我将使用这个方法来创建一个NxN矩阵的第N个循环。 - moshacoder
@edwardrford - 啊,这比我之前做的简单多了。:-) 我已经在答案中添加了一个示例。 - T.J. Crowder
1
(插入托脸表情)- 哇,我对那个问题想得太复杂了。谢谢T.J. - 我非常感激你的回答。 - moshacoder
@edwardrford - 哈哈,我们都犯过这个错误。编程愉快! - T.J. Crowder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接