Wie führe ich zwei javascript-Objekte zusammen in ES6+?
Ich bin krank und müde von immer mit, schreiben Sie code wie diesen:
function shallowExtend(obj1,obj2){
var key;
for ( key in obj2 ) {
if ( obj2.hasOwnProperty(key) === false ) continue;
obj1[key] = obj2[key]
}
}
Oder wenn ich nicht, Sie schreiben den code selbst implementieren, eine Bibliothek, die tut es schon. Sicherlich ES6+ kommt zur Rettung, wird uns so etwas wie ein Object.prototype.extend(obj2...)
oder Object.extend(obj1,obj2...)
Tut So ES6+ bietet eine solche Funktionalität? Wenn nicht bereits vorhanden, dann ist eine solche Funktionalität geplant? Wenn nicht geplant ist, warum dann nicht?
- Also, warum haben Sie nicht Hinzugefügt Ihr - Bibliothek?
- diese Frage ist über die Hoffnung, dass ES6 entfernen uns vom müssen müssen solche vorformulierten Mist in den ersten Platz.Für was es Wert ist: github.com/balupton/bal-util/blob/...
- Ich glaube nicht, dass es einen Allgemeinen Weg, um kopieren Sie die name/Wert-Paare von einem Objekt zum anderen. Tun Sie nur mit eigenen Eigenschaften oder diejenigen, die
[[Prototype]]
Kette? Tun Sie, "tief" oder "flach" - Kopien? Was ist mit nicht–zählbare und nicht–beschreibbaren Eigenschaften? Ich glaube, ich hätte lieber eine kleine Bibliothek-Funktion, die tut, was ich brauche, und meistens ist es vermeidbar sowieso.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werden Sie in der Lage zu tun, eine seichte verbinden/verlängern/vergeben in ES6 mit dem Objekt.zuweisen:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
Syntax:
wo ...Quellen stellt die Quelle Objekt(E).
Beispiel:
let merged = Object.assign({}, source1, source2);
Object.assign
: siehe meine Antwort hierJSON.parse(JSON.stringify(src))
Können Sie die Objekt verbreiten-syntax für diese:
Für arrays ist der spread-operator wurde bereits in ES6 (ES2015), aber für Objekte, die Hinzugefügt wurde, um die Sprache spec auf ES9 (ES2018). Sein Vorschlag wurde standardmäßig aktiviert, tools wie "Babel", die lange vor.
const ob1 = {foo: 123}; const ob2 = {bar: 234}; const merged = {...ob1, ...ob2}; console.log(merged)
Ausgabe:{ foo: 123, bar: 234 }
Ich weiß, das ist ein bisschen ein altes Thema, aber die einfachste Lösung in ES2015/ES6 ist eigentlich ganz einfach, mit dem Objekt.assign(),
Ich hoffe, dies hilft, dies gilt TIEF Zusammenführen sowie:
Beispiel:
Den Zusatz von
Object.mixin
wird derzeit diskutiert, kümmern sich um das Verhalten, das Sie bittet. https://mail.mozilla.org/pipermail/es-discuss/2012-December/027037.htmlObwohl es nicht in der ES6 draft noch, wie es scheint, gibt es eine Menge Unterstützung, so dass ich denke, es wird zeigen, bis in die Entwürfe bald.
.mixin
heruntergefallen von TC39.ES6
ES7 oder Babel
Vielleicht ES5
- Objekt.defineProperties
Methode wird die Arbeit machen?z.B.
MDN-Dokumentation: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperties
defineProperties
eigenen Eigenschaften definiert. Es nicht überschreiben die Eigenschaften auf der[[prototype]]
Kette Schatten Sie.Object.getOwnPropertyDescriptor
auch um die Eigenschaft, wenn es ist ein komplexer Wert, oder Sie kopieren Sie genommen wird.