2016-08-24 36 views
15

Jestem pewien, że to pytanie zostało zadane wcześniej, ale nie dość znaleźć odpowiedź szukam, tak tu idzie:Scalanie dwóch obiektów z ES6

Mam dwa obiekty, w następujący sposób:

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

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

muszę połączyć je ze sobą, tworząc w ten sposób:

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

wiem, że mogę to zrobić tak:

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

Uważam jednak, że nie jest to najlepszy sposób, aby to zrobić, ponieważ ES6 wprowadził fajne elementy destrukturyzacji/przydziału; Próbowałem głęboko obiekt połączenia, ale to nie jest jeszcze obsługiwany :(Patrzyłem też przez niektórych funkcji ramda ale nie dostrzegł niczego, co było stosowane.

Więc co jest najlepszym sposobem, aby połączyć te dwa obiekty za pomocą ES6?

+0

* „ES6 wprowadził chłodną rozpad/cesja rzeczy” *, która nie pomaga w ogóle z połączenia właściwości obiektu. –

Odpowiedz

30

można użyć Object.assign() scalić je do nowego obiektu:

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

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

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

 
console.log(newItem);

można również użyć object spread, który jest etapem 3 propozycja dla ECMAScript i wymaga Babla Object rest spread transform (wliczone w Stage 3 preset) używać:

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

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

 
const newItem = { ...item, location: response }; 
 

 
console.log(newItem);