Führen Sie zwei Objekte mit ES6 zusammen [duplicate]

Lesezeit: 2 Minuten

Benutzer-Avatar
Tom Oakley

Ich bin mir sicher, dass diese Frage schon einmal gestellt wurde, aber ich kann nicht ganz die Antwort finden, nach der ich suche, also hier ist:

Ich habe zwei Objekte, wie folgt:

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

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

Ich muss diese zusammenführen, um Folgendes zu bilden:

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

Ich weiß, ich könnte es so machen:

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

Ich habe jedoch das Gefühl, dass dies nicht mehr der beste Weg ist, da ES6 das coole Destrukturierungs-/Zuweisungs-Zeug eingeführt hat; Ich habe Deep Object Merging ausprobiert, aber es wird leider nicht unterstützt 🙁 Ich habe auch einige Ramda-Funktionen durchgesehen, konnte aber nichts Anwendbares finden.

Was ist also der beste Weg, um diese beiden Objekte mit ES6 zusammenzuführen?

  • “ES6 hat das coole Destrukturierungs-/Zuweisungs-Zeug eingeführt” Was beim Zusammenführen von Objekteigenschaften überhaupt nicht hilft.

    – Felix Klinge

    24. August 2016 um 14:03 Uhr


Benutzer-Avatar
Ori Drori

Sie können verwenden Object.assign() um sie zu einem neuen Objekt zusammenzuführen:

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

Sie können auch verwenden Objekt verbreitetbei dem es sich um einen Vorschlag der Stufe 4 für ECMAScript handelt:

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

  • Seien Sie vorsichtig, wenn Sie dies tun const newItem = { ...item, location: response };Weil location Eigentum von newItem ist ein Verweis auf response Objekt. Du machst es besser so const newItem = { ...item, location: {...response} }; um Verweise zu vermeiden und sicher zu sein.

    – hswner

    27. Mai 2018 um 11:05 Uhr


  • Object.assign funktioniert für mich.. danke.

    – Hugo Leonardo

    9. Juli 2021 um 11:27 Uhr

Benutzer-Avatar
notgiorgi

Ein weiterer Ansatz ist:

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

Aber die Objektverbreitung ist es nicht dennoch standardisiert.

Kann auch hilfreich sein: https://stackoverflow.com/a/32926019/5341953

  • Auf diese Weise wird die Antwort als Zeiger und nicht als tiefer Klon gespeichert. Dies sollte die richtige Antwort sein let result = { ...item, location : {...response} }

    – FisNaN

    7. März 2018 um 13:15 Uhr

1235330cookie-checkFühren Sie zwei Objekte mit ES6 zusammen [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy