web-dev-qa-db-fra.com

Fusionner deux objets avec ES6

Je suis sûr que cette question a déjà été posée, mais je ne trouve pas la réponse que je cherche, alors voici:

J'ai deux objets, comme suit:

const response = {
  lat: -51.3303,
  lng: 0.39440
}

let item = {
  id: 'qwenhee-9763ae-lenfya',
  address: '14-22 Elder St, London, E1 6BT, UK'
}

J'ai besoin de les fusionner pour former ceci:

item = {
  id: 'qwenhee-9763ae-lenfya',
  address: '14-22 Elder St, London, E1 6BT, UK',
  location: {
    lat: -51.3303,
    lng: 0.39440
  }
}

Je sais que je pourrais le faire comme ça:

item.location = {}
item.location.lat = response.lat
item.location.lng = response.lng

Cependant, j’estime que ce n’est plus la meilleure façon de le faire, car ES6 a introduit le truc cool de déstructuration/affectation; J'ai essayé de fusionner des objets en profondeur mais cela n'a malheureusement pas été pris en charge :( J'ai aussi jeté un coup d'œil à certaines fonctions de ramda, mais je ne pouvais rien voir qui soit applicable.

Alors, quel est le meilleur moyen de fusionner ces deux objets en utilisant ES6?

76
Tom Oakley

Vous pouvez utiliser Object.assign() pour les fusionner dans un nouvel objet:

const response = {
  lat: -51.3303,
  lng: 0.39440
}

const item = {
  id: 'qwenhee-9763ae-lenfya',
  address: '14-22 Elder St, London, E1 6BT, UK'
}

const newItem = Object.assign({}, item, { location: response });

console.log(newItem );

Vous pouvez également utiliser object spread , proposition de l’Étape 4 pour ECMAScript:

const response = {
  lat: -51.3303,
  lng: 0.39440
}

const item = {
  id: 'qwenhee-9763ae-lenfya',
  address: '14-22 Elder St, London, E1 6BT, UK'
}

const newItem = { ...item, location: response }; // or { ...response } if you want to clone response as well

console.log(newItem );
122
Ori Drori

Une autre approche est:

let result = { ...item, location : { ...response } }

Mais la propagation d'objet n'est pas encore normalisée .

Peut aussi être utile: https://stackoverflow.com/a/32926019/534195

39
notgiorgi