Хороший способ справиться с этим - вместо того, чтобы хранить их в двумерном массиве, хранить их в одном длинном массиве, чтобы вы могли сразу получить к ним доступ только по идентификатору - при условии, что идентификатор совпадает с индексом в массиве
Затем вам нужно две функции: превратить ID
в X,Y
и X,Y
в ID
const width = 12
const positionToIndex = (x, y) => (y * width) + x
const indexToPosition = (index) => ({
x: index % width,
y: Math.floor(index / width)
})
. Предполагается, что верхний левый угол равен (0, 0) и начальный индекс равен 0. Тогда вы просто инициализируете его как обычный плоский массив и используете indextoPosition()
, чтобы найти позицию x, y
// Initialize
for (var i = 0; i < width*height; i++) {
const position = indexToPosition(i)
blocks[i] = new Cell(position.x, position.y)
}
// When cell is clicked
cell.onclick = (id) => {
const {x, y} = indextoposition(id)
}