Javascript: Überschreiben NUR vorhandene Felder in einem Objekt mit den Feldern, die in einem anderen

Gibt es eine Möglichkeit in javascript
Werte zuordnen von benannten Feldern in einem Objekt an der gleichen Felder zu einem Objekt, wenn und nur wenn das Ziel-Feld vorhanden ist. I. e. überschreibt alte Werte, NICHT das hinzufügen von neuen Werten, die Verwendung ideomatic Konstrukte, one-Linern (speziell für javascript und/oder jQuery) und in keiner Weise Schleifen, auch für-in.

var theSource = {
 field1: "TEXT",
 field2: "VAL",
 field3: "ZZ",
 field4: "4",
 field5: "5"
},
theTarget = {
 field2: "0",
 field3: "",
 field4: null,
 field5: undefined
};

Etwas wie

var result = jQuery.overwriteOnlyExisting(theTarget, theSource);
result === {
 field2: "VAL"
 field3: "ZZ"
... 
}

KEIN Feld1 UND alten Felder nach feld3 erhalten.

jQuery.extend - Werte überschreiben kann, aber es kopiert die neuen Felder als gut.

Welche Möglichkeiten haben wir hier?

http://jsbin.com/owivat/1/edit (Unterstrich) - ich mag das, jetzt die Zeit zu finden, die jquery-Weg.

Ergebnisse:

_.extend(theTarget, _(theSource).pick(_(theTarget).keys()));

142,850 Ops/sec

Object.keys(theTarget).map(function(a) { if (a in theSource) theTarget[a] = theSource[a]; });

403,243 Ops/sec

  • warum ...und in keiner Weise Schleifen, auch für-in ?
  • Sie sollten underscorejs.org/#each und backbonejs.org/#Model-has für, die. Im Grunde ist es for-in-Schleife an der Quelle und Objekt.hasOwnProperty auf das Ziel.
  • cool zu wissen, aber stecken mit jQuery 🙂
  • mit nur standard-js, die wir tun können: Objekt.Schlüssel(Zeile target).map(function(a){ if(theSource[a]) die Zeile target[a]=theSource[a]})
  • jquery ist nur für DOM-manipulation, so dass Sie nicht tun, dass mit jquery... btw es ist eine einfache Aufgabe, die mit standard-javascript...
InformationsquelleAutor Max | 2013-06-27
Schreibe einen Kommentar