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

182
Vistas
¿Debo hacer una copia profunda al modificar un objeto anidado?

Recientemente comencé a aprender programación funcional en Javascript, y una cosa que se valora es la inmutabilidad. Una forma de preservar la inmutabilidad es cuando queremos modificar algún objeto que primero creamos una copia y luego modificamos esa copia y la devolvemos, por ejemplo:

 const person = { firstName: 'John', lastName: 'Smith', } const modifyFName = obj => { const objCopy = {...obj}; objCopy.firstName = 'James'; return objCopy; } console.log(modifyFName(person)) // {firstName: 'James', lastName: 'Smith'} console.log(person) // {firstName: 'John', lastName: 'Smith'}

Pero si quiero modificar algún objeto profundamente anidado, crear una copia superficial como la de arriba no haría mucha diferencia, por ejemplo:

 const person = { firstName: 'John', lastName: 'Smith', parents: { mom: { firstName: 'Jennifer', lastName: "Swift" }, dad: { firstName: 'Tom', lastName: 'Cartman' } } } const modifyDadName = obj => { const objCopy = {...obj}; objCopy.parents.dad.firstName = 'Aurelion'; return objCopy; } console.log(modifyDadName(person)) // {... dad: "Aurelion"} console.log(person) // {... dad: "Aurelion"}

Ambos objetos han cambiado. Entonces, me pregunto en esta situación, ¿debería quizás usar una copia profunda, o tal vez usar algunas estructuras de datos inmutables de terceros, o hay alguna otra solución para esto?

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

0

Tiene razón en que una copia superficial no ayuda, pero no necesita una copia profunda completa , solo tiene que hacer copias de las cosas que desea cambiar. En tu caso, son person , parents y dad , pero no mom :

 const modifyDadName = obj => { return { // Replacement `obj` (`person`) ...obj, parents: { // Replacement `obj.parents` ...obj.parents, dad: { // Replacement `obj.parents.dad` ...obj.parents.dad, firstName: "Aurelion", // New name } } }; };

dad cambia porque, bueno, esa es la operación que estamos haciendo (cambiar firstName ). :-) parents cambia porque cambiar dad significa que hay un nuevo objeto en su propiedad dad . person ( obj ) cambia porque hay un nuevo parents principal. Pero mom no cambia, así que podemos reutilizar el mismo objeto.

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