提前感谢您花时间帮我解决这个问题。
我正在尝试使用for循环生成一个这样的简单板。
var board = [[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0]];
但是,我在下面的尝试并没有成功。
function makeBoard(n){
var board=[];
for(var i=0; i<n; i++){
for(var j=0; j<n; j++){
board[i][j]=0;
}
}
return board;
}
从技术上讲,我可以使用上面显示的电路板变量,然后继续,但我更关心原理。是不是可以使用for循环创建多维数组?有没有一种简单的方法可以使用array.push()实现这一点?
答案 0 :(得分:2)
JavaScript没有多维数组,因此您必须使用数组数组:
function makeBoard(n){
var board=[];
for(var i=0; i<n; i++){
board[i] = [];
for(var j=0; j<n; j++){
board[i][j]=0;
}
}
return board;
}
您错过了为第二维创建每个数组所需的board[i] = [];
。
注意:您也可以使用Array.prototype.fill:
function makeBoard(n){
var board=[];
for(var i=0; i<n; i++){
board[i] = Array(n).fill( 0 );
}
return board;
}
答案 1 :(得分:1)
您需要为每个新子数组初始化为array:
function makeBoard(n){
var board=[];
for(var i=0; i<n; i++){
board[i] = []; // <-- this is missing!
for(var j=0; j<n; j++){
board[i][j]=0;
}
}
return board;
}
document.write('<pre>' + JSON.stringify(makeBoard(5), 0, 4) + '</pre>');
没有for循环的另一个版本
function makeBoard(n){
return Array.apply(null, {length: n}).map(function () {
return Array.apply(null, {length: n}).map(function () {
return 0;
});
});
}
document.write('<pre>' + JSON.stringify(makeBoard(5), 0, 4) + '</pre>');
答案 2 :(得分:0)
您生成一个数组,然后在其中循环新数组。像这样:
var arr = new Array(10);
for (var i = 0; i < 10; i++) {
arr[i] = new Array(6);
}