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?
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 );
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