首页 > 解决方案 > 如何在没有变异的情况下更改对象内部的对象?

问题描述

所以我的问题是如何在不改变用户对象的情况下更改用户对象内的 petNames 对象。

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

第一级我们可以改变

{...user, age: 48 }

它会回来

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

但是我怎样才能改变 petNames 呢?

例如,狗名更改为“雷克斯”。

得到像这样的对象

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

谢谢!

标签: javascriptobjectecmascript-6

解决方案


您也可以传播内部属性:

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


推荐阅读