javascript - 如何在 Javascript 中创建二维数组

标签 javascript arrays matrix 2d

我正在尝试使用 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 循环创建一个二维数组。代码底部的嵌套 for 循环显示为我希望如何调用“单元格”[X][Y] 的示例。

最佳答案

这段代码:

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

创建一个新数组,将其存储在 pixel_array[rowcount] 中,然后将 y_array 压入其中。所以在这一点上,你有一个数组 (pixel_array),其中一个条目是一个数组(你通过 [] 创建的),一个条目是一个数组 (y_array)。这比 2D 阵列更接近 3D 阵列。

你可能把它复杂化了一点。我不能完全弄清楚你想要你的最终数组是什么,所以这里有一个创建 3x4“2D 数组”的例子(它不是真正的¹,它是一个数组数组,但是......)数字 1 -12 在里面,看评论:

// 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;
}


在您的评论中:

I want to create a 2D array from a single For loop. So in my example I'm looping 0-99, with the expected result being a 10x10 'matrix' (0-9, 10-19, 20-29, etc).

这是一个例子:

// 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 没有多维数组。它具有可以包含其他数组的数组。对于许多用途而言,区别并不重要,但这意味着(除其他外)数组可以锯齿状:并非外部数组中的所有条目都必须具有相同的长度。 (事实上​​,它们甚至不必是数组。)

关于javascript - 如何在 Javascript 中创建二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57286655/

相关文章:

javascript - 为什么更新多个 Twilio IPM channel 的消耗范围失败?

javascript - 通用ajax表单提交

javascript - 带有闭包编译器的 AngularJS - 简单优化失败

python - 如何使用带有约束和动态函数的 Scipy minimize

performance - 矩阵乘法 - 分而治之 vs Strassen,分而治之更快?

javascript - AJAX Post 多种表单

ios - 错误 : generic parameter 'T' could not be inferred in swift

python - 将多个掩码应用于数组

python - 平衡 numpy 数组与过采样

javascript - 如何在 ThreeJS 中应用矩阵变换并将结果设置为默认状态?