web-dev-qa-db-ja.com

スプレッド演算子を使用してオブジェクト値を更新する

私は着信オブジェクトにキーを追加する関数を持っていますが、そのためにスプレッド演算子を使用するように言われました、私はスプレッド演算子を使用して同じプロパティを持つ新しいオブジェクトを作成し、その上にisAvailableを設定できると言われました。

  return new Partner(ServerConfig, capabilities, initialState)
}

class Partner {
  constructor (ServerConfig, capabilities, initialState) {
    initialState.isAvailable = true

だから私はこのようなことを試みましたが、成功は成功しました、助けてもらえますか?混乱して、このようにスプレッド演算子を使用する必要がありますか?関数から戻りますか?

newObject = {}

//これを関数内で使用し、戻り値から値を取得します

   return {
     value: {
       ...newObject,
       ...initialState
     }
   }

initialState.isAvailable = true

14
Rasim Avcı

プロパティが追加されますin order。したがって、既存のプロパティをオーバーライドする場合は、先頭ではなく末尾に配置する必要があります。

return {
  value: {
    ...initialState,
    ...newObject
  }
}

ただし、newObjectは必要ありません(既に横になっている場合を除く)。

return {
  value: {
    ...initialState,
    isAvailable: newValue
  }
}

例:

const o1 = {a: "original a", b: "original b"};
// Doesn't work:
const o2 = {a: "updated a", ...o1};
console.log(o2);
// Works:
const o3 = {...o1, a: "updated a"};
console.log(o3);
22
T.J. Crowder