Búsqueda de sitios web

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