[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt mehrdimensionales Array reduzieren

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

mehrdimensionales Array reduzieren

da-tex
Beiträge gesamt: 67

2. Jul 2013, 10:29
Beitrag # 1 von 4
Bewertung:
(879 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo an alle,
ich versuche gerade ein mehrdimensionales array auf die nötigsten werte zu reduzieren. Dazu folgendes Beispiel:

Code
0 10 15 
0 21 26
0 27 31
1 3 15
1 10 13
1 15 21
2 38 55
3 8 21
3 22 41


Die erste Spalte stellt die Seitenzahl dar, die zweite Spalte die y1-Koordinate und die dritte die y2-Koordinate.
Sinn ist es, pro Seite die erste y1-Koordinate und die letzte y2-Koordinate zu extrahieren und diese in ein neues mehrdimensionales array zu schreiben.

Das Ergebnis sollte wie folgt aussehen:
Code
0 10 31 
1 3 21
2 38 55
3 8 41


Mit nachfolgendem Code gelingt es die Werte in ein eindimensionales Array zu schreiben.
Code
var _array = [ 
[0,10,15],
[0,21,26],
[0,27,31],
[1,3,15],
[1,10,13],
[1,15,21],
[2,38,55],
[3,8,21],
[3,22,41],
]

if(_array.length>1){
_finalArray = [[_array[0][0], _array[0][1]]];
for(var a = 1; a<_array.length; a++){
if(_array[a-1][0] != _array[a][0]){
_finalArray.push(_array[a-1][2]);// letzte y2-Koordinate aus vorhergehendem block
_finalArray.push(_array[a][0]);
_finalArray.push(_array[a][1]);
}
if(a==_array.length-1) _finalArray.push(_array[a][2]);
}
}

$.writeln (_finalArray)


Es wäre schön, wenn mir jemand einen Denkanstoß geben kann, damit die Werte in ein dreidimensionales Array geschrieben werden.

Danke im Voraus
Philipp

(Dieser Beitrag wurde von da-tex am 2. Jul 2013, 10:30 geändert)
X

mehrdimensionales Array reduzieren

WernerPerplies
Beiträge gesamt: 2693

2. Jul 2013, 14:36
Beitrag # 2 von 4
Beitrag ID: #514515
Bewertung:
(832 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Philipp,

Code
    /*array*/Array.prototype.sortThis=function(/*String*/field, reverse) 
{
if (reverse == null) var reverse = false;
if (reverse) return this.sort(sortthisDown);
else return this.sort(sortthisUp);

/*int*/function sortthisUp(e1, e2)
{
if (field==null)
{
if (e1<e2) return -1;
if (e1>e2) return 1;
return 0;
}
else
{
if (e1[field]<e2[field]) return -1;
if (e1[field]>e2[field]) return 1;
return 0;
}
}
/*int*/function sortthisDown(e1, e2)
{
if (field==null)
{
if (e1>e2) return -1;
if (e1<e2) return 1;
return 0;
}
else
{
if (e1[field]>e2[field]) return -1;
if (e1[field]<e2[field]) return 1;
return 0;
}
}
}
main();

function main()
{
/*Array*/var toExtract = [[0,21,26],[0,27,31],[1,3,15],[1,10,13],[2,38,55],[3,8,21],[3,22,41],[0,10,15],[1,15,21]];
// sort pages
toExtract.sortThis(0);
/*Array*/var result = new Array();
var i = 0;
if (toExtract.length == 0) return;
/*object*/var page = new Page(toExtract[i][0], [toExtract[i][1]], [toExtract[i][2]]);
for(i=1; i<toExtract.length; i++)
{
if (toExtract[i-1][0]== toExtract[i][0])
{
page.y1.push(toExtract[i][1]);
page.y2.push(toExtract[i][2]);
}
else
{
result.push(page);
page = new Page(toExtract[i][0], [toExtract[i][1]], [toExtract[i][2]]);
}
}
result.push(page);
// now handle pages:
for (i=0; i<result.length; i++)
{
// sort y1, y2 in page:
result[i].y1.sortThis();
result[i].y2.sortThis();
// store result and delete not needed elements
result[i].y1.length =1;
result[i].y2[0] = result[i].y2[result[i].y2.length-1];
result[i].y2.length = 1;
}
// format for alert
/*string*/var o = "";
for (i=0; i<result.length;i++)
{
o+= "Seite: " + result[i].number + " y1: " + result[i].y1 + " y2: " + result[i].y2 + "\n";
}
alert(o);
return;
function Page(/*int*/number, /*float*/y1, /*float*/y2)
{
this.number = number;
this.y1 = y1;
this.y2 = y2;
}
}


Das sollte den Job erledigen.

Dieses Skript sortiert das Array nach Seitennummer, dann erzeugt es für jede Seite ein Seitenobjekt, sortiert die Y-Werte innerhalb der Seite, speichert den niedrigsten Y1-Wert und den höchsten Y2-Wert.
Zum Schluss gibt es eine Ergebnisliste aus.
Ich denke, das war es was Du wolltest.

Array.prototype.sortThis()
sortiert ein- und mehrdimensionale Arrays.
HTH


als Antwort auf: [#514480]

mehrdimensionales Array reduzieren

da-tex
Beiträge gesamt: 67

3. Jul 2013, 07:16
Beitrag # 3 von 4
Beitrag ID: #514547
Bewertung:
(789 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Herr Perplies,
vielen Dank für Ihre Bemühungen.
Wahrscheinlich war ich etwas unflexibel, was die Herangehensweise betraf ;)
Es funktioniert sehr gut.

Philipp


als Antwort auf: [#514515]

mehrdimensionales Array reduzieren

WernerPerplies
Beiträge gesamt: 2693

3. Jul 2013, 07:19
Beitrag # 4 von 4
Beitrag ID: #514548
Bewertung:
(787 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Philipp,

Zitat vielen Dank für Ihre Bemühungen.


Zitat Wahrscheinlich war ich etwas unflexibel, was die Herangehensweise betraf ;)

Wie drückt sich das aus?


als Antwort auf: [#514547]
X

Aktuell

Web / SEO / Blockchain / Betriebssystem
unsplash_300

Veranstaltungskalender

Hier können Sie Ihre Anlässe eintragen, welche einen Zusammenhang mit den Angeboten von HilfDirSelbst.ch wie z.B. Adobe InDesign, Photoshop, Illustrator, PDF, Pitstop, Affinity, Marketing, SEO, Büro- und Rechtsthemen etc. haben. Die Einträge werden moderiert freigeschaltet. Dies wird werktags üblicherweise innert 24 Stunden erfolgen.

pdf-icon Hier eine kleine Anleitung hinsichtlich Bedeutung der auszufüllenden Formularfelder.

Veranstaltungen
01.12.2022

Online
Donnerstag, 01. Dez. 2022, 10.00 - 10.45 Uhr

Webinar

Die drei ColorLogic-Programme ZePrA, CoPrA und ColorAnt sind in neuen Versionen mit vielen neuen Funktionen im Jahr 2022 veröffentlich worden oder werden in Kürze veröffentlicht (ColorAnt 9). In unserem ca. 45 minütigen kostenlosen Webinar zeigen wir Ihnen einige dieser neuen Funktionen mit dem Schwerpunkt auf Automatisierung und Produktivitätssteigerungen.

Ja

Organisator: Impressed GmbH

Kontaktinformation: Silvia Noack, E-Mailsnoack AT impressed DOT de

https://www.impressed.de/schulung.php?c=sDetail&sid=311

ColorLogic Update-Webinar ZePrA 10, CoPrA 9 und ColorAnt 9
Veranstaltungen
02.02.2023

Prozesse optimieren und effizient gestalten

Zürich
Donnerstag, 02. Feb. 2023, 08.00 - 10.00 Uhr

Digitalisierung, Webauftritt

Digitalisierung mitgestalten - Worauf kommt es an? Wie wichtig ist die Webseite? Webseite mit Word Press? Interne Prozesse optimieren

Ja

Organisator: B. Isik - SNF Academy

Kontaktinformation: Birol Isik, E-Mailinfo AT bkcc DOT ch

https://digitalisierung-heute.ch/digitalisierung-informationstag-schweiz/