Estoy tratando de escribir un método Typescript para un juego de buscaminas que mira si los vecinos de un campo son míos y obtengo el mismo error cada vez:
Uncaught TypeError: Cannot read properties of undefined (reading '5') private getNeighbours(field: Field[][]): number[][]{ let mineNeighbours: number[][] = new Array(field.length) .fill(0) .map(() => new Array(field.length).fill(0)); for (let i = 0; i < field[0].length; i++){ for (let j = 0; j < field[1].length; j++){ for (let yOffset = -1; yOffset < 2; yOffset++){ for (let xOffset = -1; xOffset < 2; xOffset++){ if (!(i + yOffset < 0 || i + yOffset > field[0].length || j + xOffset < 0 || j + xOffset < field[1].length || xOffset == 0 || yOffset == 0)){ if (field[i + yOffset][j + xOffset] instanceof Mine){ mineNeighbours[i][j]++; } } } } } } return mineNeighbours; }el error proviene de la línea donde compruebo si el campo actual es una instancia de Mine
Intenté depurarlo pensando que había pasado un agrumento indefinido pero ese no es el problema. Mi suposición es que hay algo mal en la oración if sobre la verificación de las minas. El método debe devolver una matriz int con el recuento de vecinos de cada campo.
Su error estará en su declaración if
let validY = i + yOffset >= 0 || i + yOffset < field[0].length; let validX = j + xOffset >= 0 || j + xOffset < field[1].length; let isDifferentCell = xOffset !== 0 && yOffset !== 0; if( validY && validX && isDifferentCell ) { if (field[i + yOffset][j + xOffset] instanceof Mine){ // Also is there a reason why this needs to be checked can the field value not be an instance of Mine? I would remove this if its always going to be a Mine mineNeighbours[i][j]++; } }Esto lo limpia un poco mejor para que sea más fácil de leer (grandes declaraciones if como esa pueden volverse confusas). Creo que su problema fue que estaba comprobando dos veces cada xey por separado. entonces era posible que el índice no fuera válido pero el otro no.