Objekte vergleichen - WpsCompareObjects

Die Klasse WpsCompareObjects:
Download, Anwemderfragen, Anwendungsbeispiele
Antworten
wernerperplies
Beiträge: 192
Registriert: 6. Aug 2011, 17:48
Wohnort: 18374 Zingst
Kontaktdaten:

Objekte vergleichen - WpsCompareObjects

Beitrag von wernerperplies » 19. Jan 2012, 10:23

Download (erfordert Anmeldung/Registrierung im Forum): WpsCompareObjects

Dieser Beitrag entstand als Reaktion auf eine Diskussion in der
HilfDirSelbst.ch-Skriptwerkstatt:
Unterschiede zwischen Formaten und lokaler Formatierung

Um die diese Unterschiede zu ermitteln, muss man die einzelnen Formateigenschaften miteinander vergleichen.

Dies geschieht am einfachsten durch eine for ... in Object-Schleife:

Dabei müssen nacheinander eine ganze Reihe von Objekten verglichen werden.

Objekte können dabei nicht durch direkten Vergleich, sondern nur durch Vergleich der einzelnen Inhalte ermittelt werden.

Vergleichen sie einmal die beiden Arrays:

var a1 = [1,2,3];
var a2 = [1,2,3];
(a1===a2) -> false!

Hier werden nämlich nicht die Inhalte der beiden Arrays verglichen, sondern die Speicheradressen!

Das folgende Skript sollte für jedes InDesign-JavaScript-Objekt funktionieren, ich habe es aber bisher nur mit Arrays, Zellformaten, Absatzformaten und Absätzen getestet.

Für Rückmeldungen wäre ich deshalb dankbar.

Das Skript wurde als Klasse mit den Methoden
  • compare2Objects()
  • getAllNamesTypesConstructorNamesofPropertiesOfObject(object)
  • saveObjektInfos(object)
realisiert.

printOutDifferences() -> neue Funktion in Datei!

saveStringWithDialog() -> neue Funktion in Datei!

compare2Objects(o1,o2,exclude, useOnly)]
Die Routine vergleicht zwei beliebige Objekte und gibt ein Arrray mit den Unterschieden zurück.
Das Ergebnisarray hat die Parameter
  • result.constructorName des zu vergleichenden Objects
  • result.ready -> Vergleich wurde abgeschlossen
  • result.differences -> Array, wenn Länge => 0, Objekte sind gleich, andernfalls ein geschachteltes Array mit allen Unterschieden.
  • Mit dem Parameter exclude (array) könnten und sollten Sie nicht gewünschte Eigenschaften vom Vergleich ausschließen. Für InDesign-Objekte sollten Sie unbedingt die mitgelieferte Liste verwenden, andernfalls erhalten Sie einen Stacküberlauf!
  • Mit dem Parameter useOnly (array) können Sie bestimmen, welche Eigenschaften verglichen werden sollen!
getAllNamesTypesConstructorNamesofPropertiesOfObject(object)]
Gibt ein Array mit allen Eigenschaften des Objektes zurück. Zu jeder Eigenschaften wird der ConstructorName und der Datentyp ausgegeben.

saveObjektInfos(object)]
Speichert das Ergebnis von getAllNamesTypesConstructorNamesofPropertiesOfObject(object) in drei sortierten Varianten in eine Datei

In der main-Function finden Sie einige Beispielanwendungen, die Sie durch Entfernen der Kommentarzeichen aktivieren können.

Das komplette Skript kann nach Anmeldung im Forum als Anhang heruntergeladen werden.
Zuletzt geändert von wernerperplies am 30. Jan 2012, 17:49, insgesamt 3-mal geändert.
einen schönen Tag wünscht

Werner Perplies
https://www.weepee.de

Antworten

Zurück zu „WpsCompareObjects“