当前位置:  开发笔记 > 编程语言 > 正文

Object.assign-override嵌套属性

如何解决《Object.assign-override嵌套属性》经验,为你挑选了2个好方法。

我有一个a这样的对象:

const a = {
  user: {
   …
   groups: […]
   …
  }
}

因此,有更多的属性 a.user

我想只改变a.user.groups价值.如果我这样做:

const b = Object.assign({}, a, {
  user: {
    groups: {}
  }
});

b没有任何其他财产,除了b.user.groups,所有其他财产都被删除.是否有任何ES6方式只能更改嵌套属性,而不会丢失所有其他属性Object.assign



1> philipp..:

经过一番尝试,我找到了一个看起来非常漂亮的解决方案:

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
   }
 }



2> pratZ..:

你可以这样改变它,

const b = Object.assign({}, a, {
  user: Object.assign({}, a.user, {
          groups: {}
        })
});

或者只是做,

const b = Object.assign({}, a);
b.user.groups = {};


不要改变`b.user.groups`,`user`在b和a之间共享!
推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有