Scalanie dwóch obiektów za pomocą ES6 [duplikat]

to pytanie ma już odpowiedzi tutaj : Jak połączyć dwa obiekty javascript w ES6+? (6 odpowiedzi) Zamknięty 4 lata temu .

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?

Author: Tom Oakley, 2016-08-24

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 );
 157
Author: Ori Drori,
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

 60
Author: notgiorgi,
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