我有一个a
这样的对象:
const a = { user: { … groups: […] … } }
因此,有更多的属性 a.user
我想只改变a.user.groups
价值.如果我这样做:
const b = Object.assign({}, a, { user: { groups: {} } });
b
没有任何其他财产,除了b.user.groups
,所有其他财产都被删除.是否有任何ES6方式只能更改嵌套属性,而不会丢失所有其他属性Object.assign
?
经过一番尝试,我找到了一个看起来非常漂亮的解决方案:
const b = Object.assign({}, a, { user: { ...a.user, groups: 'some changed value' } });
为了使这个答案更加完整,请注意以下几点:
const b = Object.assign({}, a)
基本上与以下相同:
const b = { ...a }
因为它只是将a
(...a
)的所有属性复制到一个新的Object.所以上面写的可以写成:
const b = { ...a, //copy everything from a user: { //override the user property ...a.user, //same sane: copy the everything from a.user groups: 'some changes value' //override a.user.group } }
你可以这样改变它,
const b = Object.assign({}, a, { user: Object.assign({}, a.user, { groups: {} }) });
或者只是做,
const b = Object.assign({}, a); b.user.groups = {};