1. ホーム
  2. javascript

Object.assign-overrideのネストされたプロパティ

2023-12-01 01:12:16

質問

オブジェクト 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 ) を新しいオブジェクトに変換します。つまり、上記は次のように書くことができます。

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