Scalanie dwóch obiektów za pomocą ES6 [duplikat]
Jestem pewien, że to pytanie zostało już zadane, ale nie mogę znaleźć odpowiedzi, której szukam, więc proszę bardzo:
Mam dwa obiekty:
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 razem, aby utworzyć to:
item = {
id: 'qwenhee-9763ae-lenfya',
address: '14-22 Elder St, London, E1 6BT, UK',
location: {
lat: -51.3303,
lng: 0.39440
}
}
Wiem, że mógłbym to zrobić tak:
item.location = {}
item.location.lat = response.lat
item.location.lng = response.lng
Jednak uważam, że nie jest to już najlepszy sposób, ponieważ ES6 wprowadził fajne rzeczy destrukcyjne / przypisanie; próbowałem głęboko scalanie obiektów, ale niestety nie jest obsługiwane: (przejrzałem też niektóre funkcje ramda, ale nie widzę nic, co by się przydało.
Jaki jest najlepszy sposób na połączenie tych dwóch obiektów za pomocą ES6?
2 answers
Możesz użyć Object.assign()
, aby połączyć je w nowy obiekt:
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 );
Możesz również użyć object spread , który jest propozycją etapu 4 dla 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 );
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-17 07:36:27
Kolejny aproach to:
let result = { ...item, location : { ...response } }
Ale rozprzestrzenianie obiektów nie jest jeszcze standaryzowane .
Mogą być również pomocne: https://stackoverflow.com/a/32926019/5341953
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-08 10:14:42