Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

135
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!