Javascript merge Objects
24. August 2009 | In: Javascript
Oft ist es in Javascript notwendig, die Eigenschaften zweier eindimensionaler Objekte zusammenzuführen (mergen) um z.B. immer einen definierten Zustand eines Objektes zu haben.
Ich benutze das sehr oft, wenn ich z.B. eine Form serialisiere und dieser vor dem Absenden via Ajax noch einige Parameter mitgeben möchte. jQuery bringt dafür die Funktion jQuery.extend mit. Mir fehlt dort allerdings die Möglichkeit, zu entscheiden, ob ich existierende Eigenschaften überschreiben möchte oder nicht. Deshalb hier meine Lösung mit dem zusätzlichen Paramater overwrite, der standardmäßig auf true steht.
Hier die Funktion:
function mergeObjects(a, b, overwrite) { for(var k in b) { if(overwrite == undefined && k in a) { continue; } a[k] = b[k]; } return a; } |
Beispiel: Merge eine Objekt params mit einem Objekt defaults
var defaults = { id: 0, module: 'comment', method: 'add' }; var params = { id: 90, title: 'foo', body: 'bar' }; params = mergeObjects(params, defaults); // console.log(params); => id=90 title=foo body=bar module=comment method=add params = mergeObjects(params, defaults, false); // console.log(params); => id=0 title=foo body=bar module=comment method=add |
Beim ersten Aufruf wird die Eigenschaft id überschrieben, beim zweiten Aufruf nicht, da der Parameter overwrite auf false gesetzt wurde.

Schreib einen Kommentar
Fülle das Kommentar-Formular vollständig aus oder melde dich über Twitter oder Facebook an.