Heim > Web-Frontend > js-Tutorial > Wie können Sie die tiefen Unterschiede zwischen zwei tief verschachtelten JavaScript-Objekten effektiv finden und darstellen?

Wie können Sie die tiefen Unterschiede zwischen zwei tief verschachtelten JavaScript-Objekten effektiv finden und darstellen?

Barbara Streisand
Freigeben: 2024-11-19 16:02:02
Original
652 Leute haben es durchsucht

How can you effectively find and represent the deep differences between two deeply nested JavaScript objects?

Ermitteln der Unterschiede zwischen zwei tief verschachtelten Objekten

Problem: Berechnen Sie die tiefen Unterschiede zwischen zwei tief verschachtelten JavaScript-Objekten und integrieren Sie Darstellungstechniken, um sie klar darzustellen Identifizieren Sie Änderungen.

Details: Gegeben sind zwei Objekte, oldObj und newObj ist ein benutzerdefinierter Diff-Algorithmus erforderlich, um die Unterschiede zwischen ihnen zu ermitteln, einschließlich Änderungen in Werten, Struktur und Array-Reihenfolge. Die Ausgabe sollte klar und JSON-serialisierbar dargestellt werden.

Lösung:

Eine benutzerdefinierte Klasse, deepDiffMapper, soll dieses Problem lösen:

var deepDiffMapper = function () {
  return {

    // Constants representing change types
    VALUE_CREATED: 'created',
    VALUE_UPDATED: 'updated',
    VALUE_DELETED: 'deleted',
    VALUE_UNCHANGED: 'unchanged',

    map: function(obj1, obj2) {
      // Algorithm for comparing objects

      return diff;
    },
    
    compareValues: function (value1, value2) {
      // Logic for determining value changes
      
      return result;
    },

    // Helper functions to identify object types
    ...
  }
}();
Nach dem Login kopieren

Verwendung:

Um diese Klasse zu verwenden, einfach Rufen Sie die Map-Methode mit den beiden Objekten als Argumente auf:

var result = deepDiffMapper.map(oldObj, newObj);
Nach dem Login kopieren

Ausgabe:

Die Map-Methode gibt ein Objekt zurück, das die Unterschiede zwischen den beiden Eingabeobjekten darstellt. Die Schlüssel dieses Objekts entsprechen den Eigenschaften in newObj. Jeder Wert ist selbst ein Objekt mit den folgenden Eigenschaften:

  • Typ: Der Typ der Änderung (erstellt, aktualisiert, gelöscht oder unverändert)
  • Daten: Der aktualisierte oder neue Wert ( im Falle einer Erstellung oder Aktualisierung)

Beispiel:

Angesichts der folgenden Eingabe Objekte:

var oldObj = {
  a: 'i am unchanged',
  b: 'i am deleted',
  e: {
    a: 1,
    b: false,
    c: null
  },
  f: [1, {
    a: 'same',
    b: [{
      a: 'same'
    }, {
      d: 'delete'
    }]
  }],
  g: new Date('2017.11.25')
};

var newObj = {
  a: 'i am unchanged',
  c: 'i am created',
  e: {
    a: '1',
    b: '',
    d: 'created'
  },
  f: [{
    a: 'same',
    b: [{
      a: 'same'
    }, {
      c: 'create'
    }]
  }, 1],
  g: new Date('2017.11.25')
};
Nach dem Login kopieren

Die Kartenmethode würde das folgende Objekt zurückgeben, das die Unterschiede darstellt:

{
  b: {
    type: 'deleted',
    data: undefined
  },
  c: {
    type: 'created',
    data: 'i am created'
  },
  e: {
    a: {
      type: 'updated',
      data: '1'
    },
    b: {
      type: 'updated',
      data: ''
    },
    d: {
      type: 'created',
      data: 'created'
    }
  },
  f: {
    1: {
      type: 'deleted',
      data: undefined
    },
    2: {
      b: {
        1: {
          d: {
            type: 'deleted',
            data: undefined
          }
        },
        2: {
          c: {
            type: 'created',
            data: 'create'
          }
        }
      }
    }
  }
}
Nach dem Login kopieren

Diese Darstellung zeigt deutlich die an den Objekten vorgenommenen Änderungen, wobei erstellte, aktualisierte und gelöschte Objekte hervorgehoben werden Eigenschaften.

Das obige ist der detaillierte Inhalt vonWie können Sie die tiefen Unterschiede zwischen zwei tief verschachtelten JavaScript-Objekten effektiv finden und darstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage