Recibí un "Error de tipo: no se puede establecer la propiedad '0' de indefinido" de este fragmento de código. ¡Puede alguien ayudarme con esto! Muchísimas gracias
let array = [[]]; function generateField(width, height) { for (let i = 0; i < height; i++) { for (let j = 0; j < width; j++) { array[i][j] = Math.floor(Math.random() * 3); }; }; console.log(array); return array; } generateField(5, 5);¿No debería ser la declaración de la matriz: let array = [][] en lugar de let array = [[]] ?
Solo necesita inicializar la matriz antes de intentar insertarla en el segundo nivel.
let array = []; function generateField(width, height) { for (let i = 0; i < height; i++) { if(!array[i]) array[i] = []; for (let j = 0; j < width; j++) { array[i][j] = Math.floor(Math.random() * 3); }; }; console.log(array); return array; } generateField(5, 5);array como nombre de variable porque podría producir un error en algunos navegadoresArray es básicamente una lista vinculada, no es necesario declarar Array de esta manera let array = [[]] . Seguro que lo más adecuado es crear una nueva Array y empujarla a la Array existentelet array = [[]] dentro de la función generateField para que sea más reutilizable porque mirando su código veo que quiere una función que cree una nueva Array con n filas y m columnas con números aleatorios y cuando let array = [[]] es fuera de su función se modificará cada vez que llame a generateField function generateField(width, height) { let rows = [] for (let i = 0; i < height; i++) { let columns = [] for (let j = 0; j < width; j++) { columns.push(Math.floor(Math.random() * 3)) } rows.push(columns) }; return [...rows] // create a copy of `Array` named `rows` } let matrix = generateField(3, 4) console.log(matrix)Producción
Array(4) [ (3) […], (3) […], (3) […], (3) […] ] 0: Array(3) [ 0, 1, 2 ] 1: Array(3) [ 0, 2, 0 ] 2: Array(3) [ 1, 2, 2 ] 3: Array(3) [ 2, 1, 2 ] length: 4 <prototype>: Array []