push()一个二维数组

Jo3*_*3la 28 javascript arrays for-loop push multidimensional-array

我正在尝试推送到二维数组而不会弄乱,目前我的数组是:

var myArray = [
[1,1,1,1,1],
[1,1,1,1,1],
[1,1,1,1,1]
]
Run Code Online (Sandbox Code Playgroud)

我正在尝试的代码是:

var r = 3; //start from rows 3
var c = 5; //start from col 5

var rows = 8;
var cols = 7;

for (var i = r; i < rows; i++)
{
    for (var j = c; j < cols; j++)
    {
        myArray[i][j].push(0);
    }
}
Run Code Online (Sandbox Code Playgroud)

这应该导致以下结果:

var myArray = [
[1,1,1,1,1,0,0],
[1,1,1,1,1,0,0],
[1,1,1,1,1,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
[0,0,0,0,0,0,0],
]
Run Code Online (Sandbox Code Playgroud)

但它不会也不确定这是否是正确的方法.

所以问题是如何实现这一目标?

Sir*_*rko 39

您的代码中有一些错误:

  1. 使用myArray[i].push( 0 );添加一个新列.您的代码(myArray[i][j].push(0);)将在三维数组中工作,因为它尝试将另一个元素添加到位置的数组[i][j].
  2. 您只在所有行中展开(col-d) - 多列,即使是那些尚未初始化的列,因此到目前为止还没有任何条目.

一个正确的,虽然详细的版本,但如下:

var r = 3; //start from rows 3

var rows = 8;
var cols = 7;

// expand to have the correct amount or rows
for( var i=r; i<rows; i++ ) {
  myArray.push( [] );
}

// expand all rows to have the correct amount of cols
for (var i = 0; i < rows; i++)
{
    for (var j =  myArray[i].length; j < cols; j++)
    {
        myArray[i].push(0);
    }
}
Run Code Online (Sandbox Code Playgroud)


ZER*_*ER0 5

在你的情况下,你可以做到这一点而不使用push

var myArray = [
    [1,1,1,1,1],
    [1,1,1,1,1],
    [1,1,1,1,1]
]

var newRows = 8;
var newCols = 7;

var item;

for (var i = 0; i < newRows; i++) {
    item = myArray[i] || (myArray[i] = []);

    for (var k = item.length; k < newCols; k++)
        item[k] = 0;    
}
Run Code Online (Sandbox Code Playgroud)