javascript - 'TypeError: No se pueden establecer propiedades de indefinido (estableciendo '0')' ---- Asignación de arreglo
Cuando estaba resolviendo un problema en Leetcode, definí un arreglo vacío. Intenté agregar algunos números y luego obtuve este error. No sé por qué. Mi código aquí.
// r and c are already defined numbers,arr is already defined array.
let n = [[]]
let index = 0
for (let i = 0; i < r; i++) {
for (let j = 0; j < c; j++) {
n[i][j] = arr[index]
index++;
}
}
return n;
Leetcode me dijo que n[i][j]=arr[index] tenía un error;
¿Alguien sabe por qué? Gracias.
Respuesta #1
Cada vez que el valor de i se convierte en 1, dentro del bucle interno se está estableciendo el valor a n[i][j], que es n[1][0], aquí n[1] no está definido y se está accediendo al valor del índice 0 de undefined, esa es la razón del error.
la primera iteración funciona bien porque ya hay un arreglo vacío en el índice 0 (cuando i=0).
aquí puedes intentar hacer esto
let n = []
let index = 0
for (let i = 0; i < r; i++) {
n[i] = [];
for (let j = 0; j < c; j++) {
n[i][j] = arr[index];
index++;
}
}
return n;
Respuesta #2
Como mostraron los comentarios, es posible usar .push. Así es como implementé esa solución en mi caso.
const myArray = [[]];
const height = 7;
const width = 8;
for (let i= 0; i < height; i++) {
if (i> 0) myArray.push([]); // this initialises the array.
for (let j = 0; j < width; j++) {
myArray[i][j] = "x";
}
}
console.log(myArray)
Aquí hay un codepen
