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
您的代码中有一些错误:
myArray[i].push( 0 );
添加一个新列.您的代码(myArray[i][j].push(0);
)将在三维数组中工作,因为它尝试将另一个元素添加到位置的数组[i][j]
.一个正确的,虽然详细的版本,但如下:
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)
在你的情况下,你可以做到这一点而不使用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)