Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

128
Vistas
Bucle de matriz 2D con un comportamiento extraño (FCC)

Estoy haciendo un ejercicio de aprendizaje y estoy tratando de entender el siguiente código. Pensé que tenía un manejo de matrices y bucles, pero este me tiene muy confundido.

El siguiente código:

 function zeroArray(m, n) { let newArray = []; let row = []; for (let i = 0; i < m; i++) { for (let j = 0; j < n; j++) { row.push(0); } newArray.push(row); } return newArray; } let matrix = zeroArray(3, 2); console.log(matrix);

Devoluciones

 [ [ 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0 ] ]

Sin embargo, hubiera esperado que volviera.

 [ [ 0, 0, ], [ 0, 0, 0, 0, ], [ 0, 0, 0, 0, 0, 0 ] ]

Dado que en cada ciclo i, estamos presionando (0) a la fila [] dos veces, antes de presionar la fila [] en newArray.

Sin embargo, esto no está sucediendo, y en mi depurador VSCode parece que en cada ciclo i, cada índice existente de newArray se actualiza con la última versión de la matriz fila[].

¿Por qué es esto?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Debe hacer una copia de la matriz cuando presione newArray :

 function zeroArray(m, n) { let newArray = []; let row = []; for (let i = 0; i < m; i++) { for (let j = 0; j < n; j++) { row.push(0); } newArray.push(row.slice()); } return newArray; } let matrix = zeroArray(3, 2); console.log(JSON.stringify(matrix));

about 4 years ago · Juan Pablo Isaza Denunciar

0

1) Comience el bucle exterior con i = 1 hasta i <= m , por lo que el número de bucles será m

 for (let i = 1; i <= m; i++) {

2) Debe crear una nueva row cada vez que comience el ciclo interno y empujar la row a newArray después de que finalice el ciclo interno

3) Establecer la condición del bucle interno como j < n * i

 for (let j = 0; j < n * i; j++) { 

 function zeroArray(m, n) { let newArray = []; // const row = [] // (-) for (let i = 1; i <= m; i++) { const row = []; // (+) for (let j = 0; j < n * i; j++) { // (+) row.push(0); } newArray.push(row); } return newArray; } let matrix = zeroArray(3, 2); console.log(matrix);
 /* This is not a part of answer. It is just to give the output fill height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

La matriz m x n debe ser m filas y n columnas. Así que para 3, 2 esperas

 [ [0, 0], [0, 0], [0, 0], ]

Simplemente declare la row dentro del primer ciclo:

 function zeroArray(m, n) { const newArray = []; for (let i = 0; i < m; i++) { const row = []; for (let j = 0; j < n; j++) { row.push(0); } newArray.push(row); } return newArray; } let matrix = zeroArray(3, 2); console.log(matrix);

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda