Tome la siguiente función para generar una tabla de multiplicar cuadrada:
function getMultTable(n) { /* generate multiplication table from 1 to n */ let table = new Array(n); for (let i=1; i<=n; i++) { table[i-1] = new Array(n); for (let j=1; j<=n; j++) { table[i-1][j-1] = i*j; } } return table; } console.log(getMultTable(3)); // [ // [ 1, 2, 3 ], // [ 2, 4, 6 ], // [ 3, 6, 9 ] // ]¿Por qué no se puede hacer lo siguiente en su lugar?
function getMultTable(n) { let table = new Array(n); for (let i=1; i<=n; i++) { for (let j=1; j<=n; j++) { table[i-1][j-1] = i*j; } } return table; }En otras palabras, ¿por qué no se puede crear una matriz multidimensional sobre la marcha en javascript, o es posible hacerlo de otra manera?
Empecemos por lo básico, ¿por qué no puedes hacer lo siguiente?
let arr; arr[0] = 1 La respuesta es porque arr no está definido. Bueno, cuando se inicializa una matriz, se inicializa con todas sus entradas sin definir. La table[i-1][j-1] = i*j es equivalente a
const row = table[i-1]; row[j-1] = i*j Entonces, cuando se crea la tabla, todos sus elementos son indefinidos , y la declaración row[j-1] = i*j , está tratando de establecer una propiedad de row , en otras palabras, establecer una propiedad de indefinido .
La razón es similar a por qué no puede ejecutar esto
function getMultTable(n) { let table; for (let i=1; i<=n; i++) { for (let j=1; j<=n; j++) { table[i-1][j-1] = i*j; } } return table; }Solo que en este caso su problema es intentar leer una propiedad de undefined
Puedes hacerlo algo como esto:
let arr = new Array(n).fill().map(el => new Array(n).fill());