如何填充这个锯齿状的数组?

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

因此您使用的索引是存储在 rowcountboxcount 属性 处的值,即与做的相同:

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([]);
        ...
}