Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

340
Visualizações
Javascript array.push reemplaza todos los elementos en lugar de agregar una matriz

Estaba probando cosas en Vanilla JS y me encontré con un problema en el que array.push no empuja otra matriz (fila) cuyos elementos se cambiaron en un bucle for, sino que reemplaza toda la matriz (mainArr). Sería mejor mostrar el código, así que desplácese hacia abajo

 function genArray(m, n) { let mainArr = []; let row = []; for (let i = 0; i < m; i++) { for (let j = 0; j < n; j++) { row.push(j); } mainArr.push(row) } return mainArr; } let myArr = genArray(3, 2); console.log(myArr); /** * outputs: * * [ [ 0, 1, 0, 1, 0, 1 ], * [ 0, 1, 0, 1, 0, 1 ], * [ 0, 1, 0, 1, 0, 1 ] ] * * why not: * * [ [ 0, 1 ], * [ 0, 1, 0, 1 ], * [ 0, 1, 0, 1, 0, 1 ] ] */

Al principio pensé que era solo por la referencia adjunta como dice esta respuesta SOF, pero como muestra el código, no es así.

 let arr1 = [] let arr2 = [1, 2] arr1.push(arr2) console.log(arr1); // [ [ 1, 2 ] ] arr2 = [2, 4] console.log(arr1); // still [ [ 1, 2 ] ] let arr3 = [] let obj1 = {name: "John"} arr3.push(obj1) console.log(arr3); // [ {name: "John"}] obj1.name = "Mike" console.log(arr3); // [ {name: "Mike"} ]

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Puede usar la asignación de desestructuración en lugar de array.push. como esto:

 function genArray(m, n) { let mainArr = []; let row = []; for (let i = 0; i < m; i++) { for (let j = 0; j < n; j++) { row=[...row,j]; } mainArr.push(row) } return mainArr; } let myArr = genArray(3, 2); console.log(myArr);
about 4 years ago · Juan Pablo Isaza Relatório

0

Está actualizando la misma matriz cada vez, por lo que todas las listas insertadas eventualmente apuntarán a la misma referencia con el valor establecido en la última iteración.

La siguiente es una solución con una mejora para alcanzar el resultado esperado:

 function genArray(m, n) { const mainArr = []; for (let i = 0; i < m; i++) { const row = []; let count = i; while(count-- >= 0) { for (let j = 0; j < n; j++) { row.push(j); } } mainArr.push(row) } return mainArr; } console.log( genArray(3, 2) );

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda