naden.de Bookmarken

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.

Bewertung: najagut
Loading ... Loading ...

Ähnliche Beiträge

Schreib einen Kommentar

Fülle das Kommentar-Formular vollständig aus oder melde dich über Twitter oder Facebook an.
Sign in with Facebook

By Teledir Internetanbieter