LeDigital
LeDigital

Reputation: 23

How to change Object inside Object without mutation?

So my question is how to change petNames object inside user Object without mutating it.

const user = { 
        name: 'Harry', 
        age: 50, 
        petNames: { 
         dog: 'Lisie', 
         cat: 'Foxer' 
        } 
    };

First level we can change like

{...user, age: 48 }

It will return

{ 
 name: 'Harry', 
 age: 48, 
 petNames: { 
    dog: 'Lisie', 
    cat: 'Foxer' 
 } 
};

But how can i change petNames ?

For example dog name change to 'Rex'.

And get object like

{ 
 name: 'Harry', 
 age: 50, 
 petNames: { 
    dog: 'Rex', 
    cat: 'Foxer' 
 } 
};

Thank you!

Upvotes: 1

Views: 429

Answers (1)

Ori Drori
Ori Drori

Reputation: 193258

You can spread the inner properties as well:

const user = {
  name: 'Harry',
  age: 50,
  petNames: {
    dog: 'Lisie',
    cat: 'Foxer'
  }
};

const newUser = {
  ...user,
  petNames: {
    ...user.petNames,
    dog: 'rex'
  }
};

console.log(user.petNames === newUser.petNames); // false

Upvotes: 4

Related Questions