hilfdirselbst.ch
Facebook Twitter gamper-media

**********************************************
        Facelifting HDS: Danke für deine Unterstützung!

**********************************************


pixxxelschubser p
Beiträge: 1541
13. Dez 2017, 00:02
Beitrag #1 von 9
Bewertung:
(1914 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Objekt-Literal


Hallo zusammen,
ich „spiele“ gerade ein bisschen mit einem „aus der hohlen Hand“ erzeugtem Objekt-Literal herum.

Beispielcode:
Code
var obj = { 
name1 : "value1",
name2 : "value2",
name3 : "value3"
}

Es ist problemlos möglich, die einzelnen values über ihre keys anzusprechen und auch zu ändern.

Egal ob:
obj['name2'] = "valueNeu";
oder
obj['name'+2] = "valueNeu";
oder
obj.name2 = "valueNeu";

… es gibt genügend Varianten für Aufruf und Neuzuweisung.


Allerdings kann ich keinen einfachen Weg finden, die einzelne keys/namen aufzurufen und zu ändern.

Kann mir hier jemand „unter die Arme greifen“ und mir erklären, wie ich z.B.
obj['name2'] = "value2";
obj['name3'] = "value3";
in
obj['key2'] = "value2";
obj['andererName3'] = "value3";
ändere?

Also im Objekt nur die keys ändere und die Werte beibehalte?

Den einzigen Weg der mir bis jetzt eingefallen ist, empfinde ich eher als einen kruden Workaround --> ein neues Objekt mit neuen keys erstellen und die passenden Werte einfach wieder zuordnen.

Geht das nicht doch direkter?
Vielen Dank im Voraus.

viele Grüße
pixxxelschubser




Was wir wissen, ist ein Tropfen; was wir nicht wissen, ein Ozean.

Isaac Newton


Top
 
X
Martin Fischer  M  p
Beiträge: 11808
13. Dez 2017, 06:58
Beitrag #2 von 9
Beitrag ID: #561401
Bewertung:
(1899 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Objekt-Literal


Hallo Hans-Jürgen,

versuch's mal so:

Code
var obj = { 
"name1" : "value1",
"name2" : "value2",
"name3" : "value3"
}

obj['key2'] = obj['name2'];
delete obj['name2'];


Viele Grüße
Martin
als Antwort auf: [#561400]
(Dieser Beitrag wurde von Martin Fischer am 13. Dez 2017, 07:38 geändert)
Top
 
WernerPerplies
Beiträge: 2184
13. Dez 2017, 08:09
Beitrag #3 von 9
Beitrag ID: #561403
Bewertung:
(1878 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Objekt-Literal


Hallo pixxxelschubser,

Auf die Schnelle fällt mir nur dies ein (dürfte ziemlich langsam sein):
Code
// DESCRIPTION rename object properity 
// Dateiname: wpsObjectPropertyRename.jsx
// © 2017 by Werner Perplies, EDV-Anwendungsberatung,
// http://www.weepee.de, email: werner.perplies@weepee.de
// [modified]
// created: Wed Dec 13 2017 08:01:30 GMT+0100
// [lastFileProps:({time:"1487325362000", size:3813, checkSum:"262c6114"})]
// [end of header]
// #include "C:/Workspaces/wpsObjectPropertyRename.jsx
Object.prototype.propertyRename = function(oldName,newName)
{
var /*Any*/value = this[oldName];

delete this[oldName];
this[newName] = value;
}

// start only for testing
main();

/*Void*/function main()
{
var /*Void*/o = {name1: "name1", name2:"name2"};

o.propertyRename("name1", "name3");

alert(o.name3);
}
// end only for testing


Ach ja, wofür braucht man so etwas?

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler jetzt mit Vollwaschgang
Aktuelles
XING
als Antwort auf: [#561400] Top
 
pixxxelschubser p
Beiträge: 1541
13. Dez 2017, 22:39
Beitrag #4 von 9
Beitrag ID: #561421
Bewertung:
(1794 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Objekt-Literal


Hallo Martin und Werner,
ich danke euch sehr für eure Antworten. Das ist schon viel mehr als ich überhaupt erwartet hatte. Ich werde eure vorgeschlagenen Lösungen garantiert in den nächsten Tagen durchtesten und euch dann noch einmal ein Feedback geben.

Auf den ersten Blick sehen sowohl Martins Vorschlag für die „einfache“ Umbenennung als als Werners prototype-Funktion sehr vielversprechend aus.


Antwort auf: … Ach ja, wofür braucht man so etwas?

Bisher habe ich das nicht gebraucht. Doch irgendwann ist immer das erste Mal. Bin in ein Thema reingerutscht und die (einfachste) Lösung für das dortige Problem (ohne den Code komplett umzuschreiben) schien mir die Änderung der keys in dem bereits vorhandenen Objekt zu sein. Hat dann auch funktioniert. Wie gesagt mit dem etwas kruden Workaround über ein zweites neu anzulegendes Objekt. Bei Interesse findet ihr das Thema hier:
https://forums.adobe.com/thread/2422300

Danke nochmals und bis demnächst

viele Grüße
pixxxelschubser




Was wir wissen, ist ein Tropfen; was wir nicht wissen, ein Ozean.

Isaac Newton


als Antwort auf: [#561403]
(Dieser Beitrag wurde von pixxxelschubser am 13. Dez 2017, 22:43 geändert)
Top
 
WernerPerplies
Beiträge: 2184
14. Dez 2017, 09:26
Beitrag #5 von 9
Beitrag ID: #561422
Bewertung:
(1757 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Objekt-Literal


Moin pixxxelschubser,

Zitat Bei Interesse findet ihr das Thema hier:
https://forums.adobe.com/thread/2422300


Wenn ich das richtig verstanden habe, geht es in diesem Beispiel um die Loakalisierung eine Skriptes, und so etwas würde ich nicht im Skript hart codieren, sondern über externe Dateien lösen.

Ein Beispiel für solch eine Lösung findest Du in diesem Skript:

WpsIndFileIdentifier

Ist, wenn man die Problematik allgemeingültig lösen will, ein ziemlicher Aufwand, aber einmal gelöst und eingebaut, kann man ein Skript durch Erzeugung einer externen Meldungsdatei leicht an jede Sparache anpassen.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler jetzt mit Vollwaschgang
Aktuelles
XING
als Antwort auf: [#561421] Top
 
pixxxelschubser p
Beiträge: 1541
14. Dez 2017, 19:24
Beitrag #6 von 9
Beitrag ID: #561443
Bewertung:
(1708 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Objekt-Literal


Hallo Werner,
zuerst dachte ich mir, ich hätte vielleicht den falschen Link gepostet.

Aber nein. Du hast das Thema etwas missverstanden. Es geht nicht um die Lokalisierung sondern vielmehr um eine Art „Ersatz-Grep“ für Illustrator. Das Script soll (basierend auf der Wortgruppen-Liste) einzelne Wörter oder Wortgruppen durch die entsprechenden Ausdrücke in der Sprache Khmer in allen Textrahmen in allen offenen Dokumenten ersetzen.

Das ist auch schon alles. Trotzdem Danke.

viele Grüße
pixxxelschubser




Was wir wissen, ist ein Tropfen; was wir nicht wissen, ein Ozean.

Isaac Newton


als Antwort auf: [#561422] Top
 
WernerPerplies
Beiträge: 2184
14. Dez 2017, 19:47
Beitrag #7 von 9
Beitrag ID: #561446
Bewertung:
(1706 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Objekt-Literal


Hallo pixxxelschubser,

Zitat zuerst dachte ich mir, ich hätte vielleicht den falschen Link gepostet.

Ok, ich schaue mir das noch einmal an, aber ich denke die Aufgabenstellung ändert nichts am Weg:

Das Objekt als externe Json-Dateien pflegen und je nach Bedarf einlesen und keinesfalls die Eigenschaftsnamen nachträglich ändern.

Das Ändern der Eigenschaftsnamen durch Löschen und neu Erzeugen der Eigenschaften dürfte übrigens zu heftiger Tätigkeit des Garbage Collectors führen.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler jetzt mit Vollwaschgang
Aktuelles
XING
als Antwort auf: [#561443] Top
 
pixxxelschubser p
Beiträge: 1541
14. Dez 2017, 20:31
Beitrag #8 von 9
Beitrag ID: #561448
Bewertung:
(1700 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Objekt-Literal


Antwort auf: … Das Ändern der Eigenschaftsnamen durch Löschen und neu Erzeugen der Eigenschaften dürfte übrigens zu heftiger Tätigkeit des Garbage Collectors führen.


Da stimme ich dir doch zu 100% zu.

Und vielleicht ist dann gerade deswegen der Weg über ein zweites unabhängiges Objekt (das auf dem ersten basiert) doch nicht ein ganz so „kruder Workaround“ für den ich ihn zuerst gehalten hatte. Immerhin sind beide Objekte in einer Funktion gekapselt und somit dürften sich die Auswirkungen auf den globalen Scope ziemlich in Grenzen halten.

Was man trotzdem nicht nicht vergessen darf: das Ganze war keine Auftragsarbeit. Sondern vielmehr nur eine kleine Gefälligkeit im Rahmen des Forenalltags. Für den TO funktioniert das Teil hinreichend und ich schätze, solange es ihm die aufwendige Handarbeit erleichtert, nimmt eine etwas heftigere Tätigkeit der Garbage Collection sicherlich gerne in Kauf.

Und mich selbst hat zu diesem Thema hier auch nur der Aspekt der eigenen Wissenserweiterung verleitet.

viele Grüße
pixxxelschubser




Was wir wissen, ist ein Tropfen; was wir nicht wissen, ein Ozean.

Isaac Newton


als Antwort auf: [#561446] Top
 
WernerPerplies
Beiträge: 2184
15. Dez 2017, 07:54
Beitrag #9 von 9
Beitrag ID: #561451
Bewertung:
(1653 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen

Objekt-Literal


Moin pixxxelschubser,

Zitat Was man trotzdem nicht nicht vergessen darf: das Ganze war keine Auftragsarbeit. Sondern vielmehr nur eine kleine Gefälligkeit im Rahmen des Forenalltags. Für den TO funktioniert das Teil hinreichend und ich schätze, solange es ihm die aufwendige Handarbeit erleichtert, nimmt eine etwas heftigere Tätigkeit der Garbage Collection sicherlich gerne in Kauf.

Klar, wobei es in dem Skript noch weiteres Potential zur Verbesserung der Geschwindigkeit gäbe.

Noch ein Hinweis zum Thema externe Datendatei:

Der Einsatz eines leistungsfähigen JSON-Parsers löst natürlich ganz nebenbei auch das Escape-Problem (\n & Co) in dem Skript.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler jetzt mit Vollwaschgang
Aktuelles
XING
als Antwort auf: [#561448] Top
 
X