web-dev-qa-db-fra.com

Utilisation de l'opérateur d'étalement pour mettre à jour une valeur d'objet

J'ai une fonction qui ajoute une clé à l'objet entrant, mais on m'a dit d'utiliser l'opérateur de propagation pour cela, on m'a dit que je pouvais utiliser l'opérateur de propagation pour créer un nouvel objet avec les mêmes propriétés, puis définir isAvailable on it .

  return new Partner(ServerConfig, capabilities, initialState)
}

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

J'ai donc essayé quelque chose comme ça mais coulndt réussir, pouvez-vous m'aider? et confus, dois-je utiliser l'opérateur d'étalement de cette manière, revenir d'une fonction?

newObject = {}

// utilise ceci dans une fonction et obtient la valeur du retour

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

initialState.isAvailable = true

14
Rasim Avcı

Les propriétés sont ajoutées dans l'ordre, donc si vous voulez remplacer les propriétés existantes, vous devez les mettre à la fin plutôt qu'au début:

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

Vous n'avez pas besoin de newObject (sauf si vous l'avez déjà traîné), cependant:

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

Exemple:

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