Was ist die beste / Standardmethode zum Zusammenführen von zwei assoziativen Arrays in JavaScript? Tut jeder das nur, indem er seine eigene for
Schleife rollt ?
javascript
object
Wilhelm
quelle
quelle
Antworten:
mit jquery können Sie anrufen
$.extend
(Assoc. Arrays sind Objekte in js)
Schauen Sie hier: http://api.jquery.com/jQuery.extend/
edit: Wie von rymo vorgeschlagen, ist es besser, es so zu machen:
Wie hier bleiben obj1 (und obj2) unverändert.
edit2: Im Jahr 2018 ist der Weg dazu
Object.assign
:Wenn Sie mit ES6 arbeiten, kann dies mit dem Spread Operator erreicht werden :
quelle
obj1
$.extend({}, obj1, obj2)
Object.assign()
, die nicht auf JQuery basiert , wenn Sie die Bibliothek nicht bereits verwenden.Jetzt im Jahr 2016 würde ich sagen, dass der beste / Standardweg Object.assign ()
Pure Javascript ist. Es wird keine jQuery benötigt.
Weitere Informationen, Beispiele und Polyfill finden Sie hier:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
quelle
So macht es Prototype:
genannt als zum Beispiel:
EDIT : hinzugefügt hasOwnProperty () überprüfen , wie richtig durch bucabay in den Kommentaren darauf hingewiesen ,
quelle
Halte es einfach...
quelle
arrau1.prototype
hasOwnProperty
Scheck. Das Verweisen auf die Objekte als Arrays ist ebenfalls irreführend (sie sind Objekte). Die Arg-Namen sollten vermitteln, dass Array2 mutiert ist, oder ein neues Objekt sollte zurückgegeben werden. Ich würde die Antwort bearbeiten, aber tatsächlich würde es fast genau Jonathan Finglands bearbeitete Antwort werden, die bereits korrigiert wurde.Unterstrich hat auch eine Erweiterungsmethode:
quelle
Im Dojo wäre die "Zusammenführung" der 2 Objekte / Arrays
lang.mixin(destination, source)
- Sie können auch mehrere Quellen zu einem Ziel mischen usw. - Einzelheiten finden Sie in der Referenz der Mixin-Funktion .quelle
Möchten Sie eine Eigenschaft überschreiben, wenn die Namen identisch sind, die Werte jedoch nicht?
Und möchten Sie eines der Originalobjekte dauerhaft ändern?
oder möchten Sie ein neues zusammengeführtes Objekt zurückgeben?
quelle
Rolling Your Own Extend / Mixin- Funktion
...
...
Dies erweitert einfach einen Teil der Objekte rekursiv. Beachten Sie außerdem, dass diese rekursive Funktion TCO ( Tail-Call Optimized ) ist, da ihre Rückgabe der letzte Aufruf an sich selbst ist.
Darüber hinaus möchten Sie möglicherweise gezielte Eigenschaften . In diesem Fall können Sie Objekte kondensieren auf der Basis
id
,quantity
oder eine andere Eigenschaft. Dieser Ansatz könnte ein kleines Buch darüber schreiben und erfordert eine Gegenüberstellung von Objekten und kann sehr komplex werden. Ich habe dafür eine kleine Bibliothek geschrieben, die auf Anfrage erhältlich ist.Hoffe das hilft!
quelle
quelle
Im Jahr 2019 haben Sie 2 gute Möglichkeiten:
Objektzuweisung [ doc ]
Objektverbreitung [ doc ]
Der erste ist tendenziell sicherer, standardisierter und polyvalenter. Ein gutes Für und Wider hier
quelle
Yahoo UI (YUI) hat auch eine Hilfsfunktion dafür:
http://developer.yahoo.com/yui/examples/yahoo/yahoo_merge.html
quelle
jquery hat einen Booleschen Wert für Deep Copy. Sie könnten so etwas tun:
Sie können diese Funktion auch bearbeiten, um das Zusammenführen von n-Arrays zu unterstützen.
Jetzt können Sie es also tun
quelle
Ich brauchte eine tiefe Objektverschmelzung. Alle anderen Antworten haben mir also nicht sehr geholfen. _.extend und jQuery.extend funktionieren gut, es sei denn, Sie haben ein rekursives Array wie ich. Aber es ist nicht so schlimm, Sie können es in fünf Minuten programmieren:
quelle
Um Arrays in jQuery zusammenzuführen, was ist mit $ .merge?
quelle
Rekursive Lösung (erweitert auch Arrays von Objekten) + null geprüft
Tests
quelle
Object.getOwnPropertyNames is not a function
die App wird abstürzen.Hier ist die beste Lösung.
Außerdem
obj1
kann in einer Schleife ohne Probleme wachsen. (sagen wirobj2
ist dynamisch)quelle