如何填充这个锯齿状的数组?
How to fill this jagged array?
在函数范围之外时,Tiles[[]]
将丢失所有值。
var Tiles= [[]];
function drawGrid(){
Grid=true;
// for the amout of rows
for (let rowcount = 0; rowcount < amountOfrows; rowcount++) {
ctxB.lineWidth = 1;
// filling the rows
// check for (un)even
if(rowcount%2==0){
for (let boxcount = 0; boxcount < amountOfHorBoxes; boxcount++) {
ctxB.strokeStyle = "black";
ctxB.fillStyle = "white";
ctxB.beginPath();
ctxB.rect(addHorBox, addVertBox, boxsize, boxsize);
ctxB.fill();
ctxB.closePath();
ctxB.stroke();
Tiles[rowcount[boxcount]]={x1: addHorBox, y1: boxsize*rowcount, x2: addHorBox+boxsize, y2: boxsize*(rowcount+1)};
//console.log('Tiles:',Tiles[rowcount[boxcount]]);
addHorBox+=boxsize;
}
}else{
for (let boxcount = 0; boxcount < amountOfHorBoxes; boxcount++) {
ctxB.strokeStyle = "black";
ctxB.fillStyle = "white";
ctxB.beginPath();
ctxB.rect(addHorBox+boxsize/2, addVertBox, boxsize, boxsize);
ctxB.fill();
ctxB.closePath();
ctxB.stroke();
Tiles[rowcount[boxcount]]={x1: addHorBox, y1: boxsize*rowcount, x2: addHorBox+boxsize, y2: boxsize*(rowcount+1)};
//console.log('Tiles:',Tiles[rowcount[boxcount]]);
addHorBox+=boxsize;
}
}
addHorBox=0;
addVertBox+=boxsize;
}
}
我还没有完全能够检查我是否正确地填充了数组,但无论如何,它不会保存范围之外的值。我该怎么做?
在您的代码中,您将像这样访问 Tiles 数组:
Tiles[rowcount[boxcount]]={x1: addHorBox, y1: boxsize*rowcount, x2: addHorBox+boxsize, y2: boxsize*(rowcount+1)};
因此您使用的索引是存储在 rowcount
的 boxcount
属性 处的值,即与做的相同:
let index = rowcount[boxcount];
Tiles[index]={x1: addHorBox, y1: boxsize*rowcount, x2: addHorBox+boxsize, y2: boxsize*(rowcount+1)};
由于 rowcount[boxcount]
的值未定义,您将对象存储在 Tile[undefined]
.
为了访问二维数组,你需要这样做:
Tiles[rowcount][boxcount]={x1: addHorBox, y1: boxsize*rowcount, x2: addHorBox+boxsize, y2: boxsize*(rowcount+1)};
此外,您最初只有一行可用,因为您像这样初始化数组:Tiles = [[]];
我建议将 Tiles
初始化为一个空数组:Tiles = [];
然后对于每一行,将一个新的空数组推入 Tiles
:
for (let rowcount = 0; rowcount < amountOfrows; rowcount++) {
ctxB.lineWidth = 1;
Tiles.push([]);
...
}
在函数范围之外时,Tiles[[]]
将丢失所有值。
var Tiles= [[]];
function drawGrid(){
Grid=true;
// for the amout of rows
for (let rowcount = 0; rowcount < amountOfrows; rowcount++) {
ctxB.lineWidth = 1;
// filling the rows
// check for (un)even
if(rowcount%2==0){
for (let boxcount = 0; boxcount < amountOfHorBoxes; boxcount++) {
ctxB.strokeStyle = "black";
ctxB.fillStyle = "white";
ctxB.beginPath();
ctxB.rect(addHorBox, addVertBox, boxsize, boxsize);
ctxB.fill();
ctxB.closePath();
ctxB.stroke();
Tiles[rowcount[boxcount]]={x1: addHorBox, y1: boxsize*rowcount, x2: addHorBox+boxsize, y2: boxsize*(rowcount+1)};
//console.log('Tiles:',Tiles[rowcount[boxcount]]);
addHorBox+=boxsize;
}
}else{
for (let boxcount = 0; boxcount < amountOfHorBoxes; boxcount++) {
ctxB.strokeStyle = "black";
ctxB.fillStyle = "white";
ctxB.beginPath();
ctxB.rect(addHorBox+boxsize/2, addVertBox, boxsize, boxsize);
ctxB.fill();
ctxB.closePath();
ctxB.stroke();
Tiles[rowcount[boxcount]]={x1: addHorBox, y1: boxsize*rowcount, x2: addHorBox+boxsize, y2: boxsize*(rowcount+1)};
//console.log('Tiles:',Tiles[rowcount[boxcount]]);
addHorBox+=boxsize;
}
}
addHorBox=0;
addVertBox+=boxsize;
}
}
我还没有完全能够检查我是否正确地填充了数组,但无论如何,它不会保存范围之外的值。我该怎么做?
在您的代码中,您将像这样访问 Tiles 数组:
Tiles[rowcount[boxcount]]={x1: addHorBox, y1: boxsize*rowcount, x2: addHorBox+boxsize, y2: boxsize*(rowcount+1)};
因此您使用的索引是存储在 rowcount
的 boxcount
属性 处的值,即与做的相同:
let index = rowcount[boxcount];
Tiles[index]={x1: addHorBox, y1: boxsize*rowcount, x2: addHorBox+boxsize, y2: boxsize*(rowcount+1)};
由于 rowcount[boxcount]
的值未定义,您将对象存储在 Tile[undefined]
.
为了访问二维数组,你需要这样做:
Tiles[rowcount][boxcount]={x1: addHorBox, y1: boxsize*rowcount, x2: addHorBox+boxsize, y2: boxsize*(rowcount+1)};
此外,您最初只有一行可用,因为您像这样初始化数组:Tiles = [[]];
我建议将 Tiles
初始化为一个空数组:Tiles = [];
然后对于每一行,将一个新的空数组推入 Tiles
:
for (let rowcount = 0; rowcount < amountOfrows; rowcount++) {
ctxB.lineWidth = 1;
Tiles.push([]);
...
}