J'ai donc besoin d'écrire une fonction qui met à jour mon objet avec un autre objet (mais cet objet est à l'intérieur d'un tableau), par exemple:

  const mazda = { model: 5, seria: 22, wheels: 4,};

Et je veux ajouter des données de:

const newItems= [{ LCDscreen: true },{ wheels: 5 },{ model: 6},{ weight: 500},{ mirrors: 4},];

Mais ainsi la série du 1er objet est inchangée. Le résultat devrait être

{ seria: 22 ,model: 6, wheels: 4, LCDscreen: true, weight: 500 , mirrors: 4};

Quelle est la meilleure approche?

0
Viktor Russe 9 déc. 2020 à 15:48

4 réponses

Meilleure réponse

Cela peut être fait en une seule ligne:

newItems.reduce((acc, patch) => Object.assign(acc, patch), mazda)

Ceci itère sur tous les objets de la liste newItems et les fusionne dans mazda un après un.

Si vous ne souhaitez pas que l'objet mazda soit modifié mais que vous obteniez un nouvel objet, utilisez un objet vide ({}) comme premier paramètre de Object.assign:

const newMazda = newItems.reduce((acc, patch) => Object.assign({}, acc, patch), mazda)
0
shilch 9 déc. 2020 à 12:57

Je pense que cela fait ce que vous voulez. Prenez chaque élément de newList et ajoutez-le en tant que nouvelle propriété à l'objet mazda.

const mazda = { model: 5, seria: 22, wheels: 4,};

const newItems= [{ LCDscreen: true },{ wheels: 5 },{ model: 6},{ weight: 500},{ mirrors: 4}]

const result = newItems.reduce( (acc,item) => ({...acc,...item}),mazda);

console.log(result)
0
Jamiec 9 déc. 2020 à 13:01

Vous pouvez faire une boucle simple dans le tableau et se propager les objets du tableau à l'intérieur de l'objet mazda. C'est la méthode la plus rapide après avoir utilisé une boucle for.

let mazda = { model: 5, seria: 22, wheels: 4,};

const newItems= [{ LCDscreen: true },{ wheels: 5 },{ model: 6},{ weight: 500},{ mirrors: 4}]

newItems.forEach(item => {
      mazda = {...mazda, ...item};
});

console.log(mazda)
1
adiga 9 déc. 2020 à 13:15

Vous pouvez simplement utiliser:

Object.assign(mazda, ...newItems)

Les objets de newItems sont passés en tant que paramètres individuels à assign et il mettra à jour l'objet mazda avec les propriétés de chaque objet

Si vous ne voulez pas muter l'objet mazda, ajoutez un littéral d'objet vide comme premier argument

const output = Object.assign({}, mazda, ...newItems)

Voici un extrait:

const mazda = { model: 5, seria: 22, wheels: 4},
      newItems= [{ LCDscreen: true },{ wheels: 5 },{ model: 6},{ weight: 500},{ mirrors: 4}]
     
console.log(
  Object.assign(mazda, ...newItems)
)
0
adiga 9 déc. 2020 à 13:10
65217094