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

143
Vistas
¿Puede un bucle for simple en Javascript evitar la mutación de la matriz cuando se copia?

Tengo un fragmento de código como el siguiente

 let arr1 = [{status : true , name : "one"} , {status : false , name : "two"} , {status : true , name : "three"}] let arr2 = arr1.slice(); for(let i=0; i<arr2.length ; i++){ if(!arr2[i].status){ arr2[i].status = true; } } console.log("arr1....." , arr1); console.log("arr2......",arr2)

En este caso se modifican tanto arr1 como arr2. Mi resultado esperado es solo actualizar arr2 y no arr1 (solo usando un bucle for simple)

¿Cómo puedo conseguir esto?

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

0

Los objetos dentro de las matrices apuntan a las mismas referencias, por lo que si actualiza un objeto en arr2 , actualizará el mismo objeto en arr1 . Así que tienes 2 opciones,

  1. Copia profunda arr1 mientras asigna arr2 (copia profunda significa copiar incluso objetos dentro, puede funcionar más lento)

 let arr1 = [{status : true , name : "one"} , {status : false , name : "two"} , {status : true , name : "three"}] let arr2 = JSON.parse(JSON.stringify(arr1)); for(let i=0; i<arr2.length ; i++){ if(!arr2[i].status){ arr2[i].status = !arr2[i].status; } } console.log("arr1....." , arr1); console.log("arr2......",arr2)

2. Copie el objeto (que le gustaría cambiar), agregue el campo modificado como se muestra a continuación

 let arr1 = [{status : true , name : "one"} , {status : false , name : "two"} , {status : true , name : "three"}] let arr2 = [...arr1]; for(let i=0; i<arr2.length ; i++){ if(!arr2[i].status){ arr2[i] = {...arr2[i], status:!arr2[i].status}; } } console.log("arr1....." , arr1); console.log("arr2......",arr2)

about 4 years ago · Juan Pablo Isaza Denunciar

0

¿Qué tal cambiar una forma de copiar la matriz?


Para explicar por qué slice() hará que ambos se actualicen, es porque array.slice() también copia la referencia de la matriz original .

Entonces, cada vez que cambiaba la matriz original, la matriz copiada también cambiaba

 let arr1 = [{status : true , name : "one"} , {status : false , name : "two"} , {status : true , name : "three"}] const arr2 = JSON.parse(JSON.stringify(arr1)); for(let i=0; i<arr2.length ; i++){ if(!arr2[i].status){ arr2[i].status = true; } } console.log("arr1....." , arr1); console.log("arr2......",arr2)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Está creando una nueva matriz, pero los objetos que contiene siguen haciendo referencia a los originales. Debe crear nuevas referencias para estos objetos. Use lo siguiente en lugar de let arr2 = arr1.slice(); Este sería el enfoque de "Copia profunda" que mencionó @Tuba Polat.

 let arr2 = arr1.map(oldObj => { return { ...oldObj } })
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