RSS Feed

Javascript merge Objects

24.08.2009 by naden

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.


Keine Kommentare »

Noch keine Kommentare

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>