[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Abfrage Array aus Variablen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Abfrage Array aus Variablen

MarioF
Beiträge gesamt: 390

7. Okt 2019, 23:15
Beitrag # 1 von 9
Bewertung:
(7769 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin,
ich bin immer noch bei Arrays bei ;-)
Über Berechnungen erstelle ich mir eine neue Array. Wenn ich die Werte über
_Liste1[1]
abfrage, wird mir der zweite Eintrag angezeigt.
Möchte ich die Werte über for abfragen, bekomme ich Probleme. Hier mal ein einfaches Beispiel:
Code
var _Liste1 = [ 
["Wert 1", 'Irgendwas mit 1', "Und das zu 1"],
["Wert 2", "Irgendwas mit 2", "Und das zu 2"],
["Wert 3", "Irgendwas mit 3", "Und das zu 3"],
]

var _Liste1Array = [];
var _Liste1Array2 = [];
var _Array = [];

for (var f = 0; f < _Liste1.length; f++) {
_Array = '##' + (50 + f) + ',' + _Liste1[f][2] + 'Ende'
_Liste1Array.push(_Array)
}

for (var x = 0; x < _Liste1Array.length; x++) {

_Liste1Array2.push(_Liste1Array[x][1])
}

alert(_Liste1Array2.join('\n'))

Eigentlich müsste _Liste1Array2.join ja, 50,51,52 anzeigen. Ich bekomme aber nur die zweite # aus jeder Zeile angezeigt.
Zum Test habe ich _Liste1 angelegt, da wird mir richtig der zweite Teil also 'Irgendwas mit 1'... angezeigt.
Bin etwas verwirrt und weiß nicht wirklich, wonach ich suchen soll. Könnt ihr helfen?
X

Abfrage Array aus Variablen

WernerPerplies
Beiträge gesamt: 2760

8. Okt 2019, 07:25
Beitrag # 2 von 9
Beitrag ID: #572106
Bewertung:
(7755 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin Mario,

Code
// Hier definierst Du eine Reihe von globalen Variablen: 
var _Liste1 = [
["Wert 1", 'Irgendwas mit 1', "Und das zu 1"],
["Wert 2", "Irgendwas mit 2", "Und das zu 2"],
["Wert 3", "Irgendwas mit 3", "Und das zu 3"],
]

var _Liste1Array = [];
var _Liste1Array2 = [];
var _Array = [];

for (var f = 0; f < _Liste1.length; f++) {
// Dies ist kein Array, sondern ein String
_Array = '##' + (50 + f) + ',' + _Liste1[f][2] + 'Ende'
// dieses Array enthält je Element einen String!
_Liste1Array.push(_Array)
}

for (var x = 0; x < _Liste1Array.length; x++) {
// und hier machst Du etwas ganz Raffiniertes:
// jeder String ist eigentlich auch ein Array mit string.length Elementen
// deshalb fügst Du hier das zweite Zeichen des Strings ("#") Deinem Array hinzu
_Liste1Array2.push(_Liste1Array[x][1])
}
// Dies führt zu diesem Ergebnis:
/*
---------------------------
Skriptwarnung
---------------------------
#
#
#
---------------------------
OK
---------------------------
*/
alert(_Liste1Array2.join('\n'));

Alles klar?

Meine Version sähe so aus:
Code
// Schreibweise Variablen und Funktionen CamelCase,  
// Objektnamen mit Großbuchstaben beginnend, Vaiablenname mit Kleinbuchstaben beginnend

// var _Liste1 = .... definiert eine globale Variable
// besser:
alert(main());
//Ergebnis:
/*
---------------------------
Skriptwarnung
---------------------------
##50,Und das zu 1Ende
##51,Und das zu 2Ende
##52,Und das zu 3Ende
---------------------------
OK
---------------------------
*/

/*String*/function main(){
try { // falls mal etwas schiefgeht
// hier werden lokale Variablen für die Funktion main definiert
var /*Array*/liste1 = [
["Wert 1", 'Irgendwas mit 1', "Und das zu 1"],
["Wert 2", "Irgendwas mit 2", "Und das zu 2"],
["Wert 3", "Irgendwas mit 3", "Und das zu 3"],
],
/*Array*/liste1Array = [],
/*Int*/l = -1;
// da hier für jeden Durchlauf die Arraylänge neu berechnet wird,
// for (var i = 0; i < liste1.length; f++) {
// besser so:
l = liste1.length;
for (var i = 0; i < l; i++) {
liste1Array.push("##" + ((50 + i).toString()) + "," + liste1[i][2] + "Ende");
}
// hier ist alles gut gegangen
return liste1Array.join('\n');
}
catch (error){
alert(error.message + "\nFehlernummer: " + error.number.toString() + "\nin Zeile: " +error.line.toString());
}
return error.message + "\nFehlernummer: " + error.number.toString() + "\nin Zeile: " +error.line.toString();
}



als Antwort auf: [#572103]

Abfrage Array aus Variablen

MarioF
Beiträge gesamt: 390

8. Okt 2019, 09:41
Beitrag # 3 von 9
Beitrag ID: #572109
Bewertung:
(7736 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin Werner,
so ganz verstehe ich noch nicht, was da passiert, aber das muss ich mal in Ruhe durchspielen.
Code
for (var i = 0; i < l; i++) {  
liste1Array.push("##" + ((50 + i).toString()) + "," + liste1[i][2] + "Ende");
}

Aber wie komme ich an ((50 + i).toString()) ran?


als Antwort auf: [#572106]

Abfrage Array aus Variablen

WernerPerplies
Beiträge gesamt: 2760

8. Okt 2019, 09:59
Beitrag # 4 von 9
Beitrag ID: #572110
Bewertung:
(7727 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin Mario,
Zitat so ganz verstehe ich noch nicht, was da passiert, aber das muss ich mal in Ruhe durchspielen.

Ja, am Besten im Einzelschrittverfahren und/oder mit Breakpoints.
Zitat Aber wie komme ich an ((50 + i).toString()) ran?

Diese Frage verstehe ich nicht so richtig, die 50 kommen von Dir, i ist Schleifenvariable, 50+i ist die Summe aus 50 und Inhalt der Schleifenvariable, (50+1).toString() wandelt die Summe in einen String um.

toString() wirst Du hier relativ selten finden, weil JavaScript dies Umwandlung automatisch macht, wenn möglich.

Aaaber automatisch ist nicht immer gut, deswegen kann eine gezielte Umwandlung durchaus nützlich sein.

Neuere Versionen von JavaScript kennen typisierte Variablen und dann würde eine Ausdruck "Anton" + /*Typisierte Integer*/50 + /*Typisierte Integer*/i + "Ende" einen Fehler werfen.

Datentypen spielen auch in der hier benutzen JavaScript-Version duraus eine Rolle beim Vergleich:

Probier das mal:

null == undefined -> ist true
null === undefined -> ist false

1 == "1" -> true
1 === "1" -> false


als Antwort auf: [#572109]

Abfrage Array aus Variablen

MarioF
Beiträge gesamt: 390

8. Okt 2019, 10:14
Beitrag # 5 von 9
Beitrag ID: #572111
Bewertung:
(7724 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Zitat Diese Frage verstehe ich nicht so richtig, die 50 kommen von Dir, i ist Schleifenvariable, 50+i ist die Summe aus 50 und Inhalt der Schleifenvariable, (50+1).toString() wandelt die Summe in einen String um.

Verkehrt ausgedrückt ;-). Zum Hintergrund:
Ich möchte einen Kalender erstellen. Dazu sollen die Feiertage dem jeweiligen Tag zugeordnet werden. Ich habe eine Schleife, die einfach ab 1.1 die Tage hoch zählt.
Darin ist eine if-Anweisung, die sagt, wenn du zu dem Datum einen Eintrag in der Array-Feiertage findest, dann gebe den entsprechenden Feiertag aus. Zur Abfrage den Datum müsste ich an das Datum in der Array-Feiertage kommen. Steh dort ein Datum in der Form "1.01" drin, ordnet er den Feiertag auch dem richtigen Datum in der Schleife zu. So bald aber das Datum über eine Formel erstellt wird, findet er dies nicht.
Ich hier mal hier mal die Datei ran vom dem, was ich mir da zusammengeschustert habe. Vielleicht wird es klarer, was ich möchte.


als Antwort auf: [#572110]
Anhang:
kalender.jsx (7.20 KB)

Abfrage Array aus Variablen

WernerPerplies
Beiträge gesamt: 2760

8. Okt 2019, 10:19
Beitrag # 6 von 9
Beitrag ID: #572112
Bewertung:
(7723 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen


als Antwort auf: [#572111]

Abfrage Array aus Variablen

MarioF
Beiträge gesamt: 390

8. Okt 2019, 10:23
Beitrag # 7 von 9
Beitrag ID: #572113
Bewertung:
(7721 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Moin,
ja, kenne ich.
Aber um die ganze Materie zu verstehen, habe ich mir das als learn by doing raus gesucht.


als Antwort auf: [#572112]

Abfrage Array aus Variablen

WernerPerplies
Beiträge gesamt: 2760

8. Okt 2019, 15:46
Beitrag # 8 von 9
Beitrag ID: #572119
Bewertung:
(7674 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
nochmal moin,
Zitat Zur Abfrage den Datum müsste ich an das Datum in der Array-Feiertage kommen. Steh dort ein Datum in der Form "1.01" drin, ordnet er den Feiertag auch dem richtigen Datum in der Schleife zu. So bald aber das Datum über eine Formel erstellt wird, findet er dies nicht.


Ok, dieses Problem ist klar, ein Datum wird in Millisekunden gespeichert, da wird ein Vergleich selten klappen.

Versuch mal Folgendes:

(new Date()) == (new Date());

Du musst das Datum zuvor umwandeln:

Das sollte mit dieser Funktion klappen:

Code
alert(compareDate(new Date(), new Date())); 

/*Boolean*/function compareDate(/*Date*/date1, /*Date*/date2){
return (date1.getFullYear().toString()+date1.getMonth().toString()+date1.getDate().toString() ==
date2.getFullYear().toString()+date2.getMonth().toString()+date2.getDate().toString());
}



als Antwort auf: [#572111]

Abfrage Array aus Variablen

WernerPerplies
Beiträge gesamt: 2760

9. Okt 2019, 15:35
Beitrag # 9 von 9
Beitrag ID: #572140
Bewertung:
(7592 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Mario,

Du hattest mir ja per Mail mitgeteilt, dass jetzt alles klappt.
Das freut mich.

Für alle, die nach einer ähnlichen Lösung suchen, gibt es hier ein Skript von mir:

wpsGetACalendar - Kalenderobjekt erzeugen

Dieses Skript kann per Include in ein eigenes Skript eingebunden werden und stellt nach Aufruf die Kalenderdaten eines beliebigen Jahres in einem Objekt zu Verfügung.

Aufruf:
var calendar = WpsGetACalendar(/*Int*/2021) // Jahr;


als Antwort auf: [#572103]
X