Michael Stegmueller: Sortieren von Array

Hallo,

mir faellt zu einer Aufgabenstellung ein konkreter Loesungsansatz nicht ein, obwohl ich entsprechende Seiten hinsichtlich sortieren von Arrays schon durchgelesen haben. Das Problem liegt in der Sortierabsicht eines mehrdimensionalen Array. Sachverhalt wie folgt:

--------------------------------------
<element id="test1" order="2"/>
<element id="test2" order="1"/>
<element id="test3" order="4"/>

var e1ement1 = document.getElementById('test1');
var e1ement2 = document.getElementById('test2');
var e1ement3 = document.getElementById('test3');

var Array = [];
Array["test"] = [];
Array["test"]["lauf"] = [];
Array["test"]["lauf"]["xy"]["default"] = element1;
Array["test"]["lauf"]["uu"]["default"] = element2;
Array["test"]["lauf"]["xu"]["default"] = element3;

----------------------------------------

Aufruf der Sortierfunktion an folgender Stelle:

Array["test"]["lauf"].sort(????);

???? muesste durch eine Suchfunktion ersetzt werden, die auf das order attribute im element zugreift und dann dadurch die Folge erzeugt:

Array["test"]["lauf"]["uu"]["default"] = element2;
Array["test"]["lauf"]["xy"]["default"] = element1;
Array["test"]["lauf"]["xu"]["default"] = element3;

Kann mir jemand einen Tipp geben, da all die Sortierfunktionen die ich sowei gelesen habe, dass Standardbeispiel hinsichtlich einer ZahlenSortierung behandelt function(a,b){return a-b;}

Gruss

  1. Hallo Michael Stegmueller,

    ich denke, das Bsp. hilft Dir weiter:

    function mySortFun (a, b) {  
    	return a.order > b.order;  
    }  
      
    var element1 = new Object();  
    var element2 = new Object();  
    var element3 = new Object();  
      
    element1.id = "test1";  
    element1.order = 2;  
      
    element2.id = "test2";  
    element2.order = 1;  
      
    element3.id = "test3";  
    element3.order = 4;  
      
    var myArray = [];  
    myArray["test"] = [element1, element2, element3];  
    myArray["test"].sort(mySortFun);  
      
    for (var i=0; i<myArray["test"].length; i++) {  
    	window.alert(myArray["test"][i].id+"  "+myArray["test"][i].order);  
    }	
    

    Mit freundlichem Gruß
    Micha

    --
    kostenlose JavaScript Spiele: Snake, MineSweeper oder Sudoku
    1. Hallo Michael Stegmueller,

      Mit freundlichem Gruß
      Micha

      Hallo Micha, wieso erscheint meine Antwort in der Nested Ansicht jetzt eigentlich vor Euren Antworten, obwohl ich länger gebraucht habe dafür ?

      Strane

      Gruss
      Gina

      --
      X-Self-Code: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:° ss:| de:] js:| ch:| sh:) mo:| zu:)
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      1. Hallo Gina,

        wieso erscheint meine Antwort eigentlich vor Euren Antworten, obwohl ich länger gebraucht habe dafür ?

        Weil immer die neuste Antwort oben zu finden ist und nicht am Ende.

        Mit freundlichem Gruß
        Micha

        --
        kostenlose JavaScript Spiele: Snake, MineSweeper oder Sudoku
        1. [latex]Mae  govannen![/latex]

          wieso erscheint meine Antwort eigentlich vor Euren Antworten, obwohl ich länger gebraucht habe dafür ?

          Weil immer die neuste Antwort oben zu finden ist und nicht am Ende.

          ;).

          Cü,

          Kai

          --
          A workaround for an avoidable problem often adds clutter and overhead to the program which
          could have been avoided by not creating the problem in the first place.(Garrett Smith/clj)
          Foren-Stylesheet Site Selfzeug JS-Lookup
          SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
    2. Danke fuer die Antwort, aber es wird nicht mein Problem loesen. Das mehrdimensionale Array liegt so for und ich kann es nur schwerlich aendern, deshalb muss ich eine Loesung finden, die auf der gegenwaertigen Struktur aufbaut.

  2. Hallo,

    var Array = [];

    Probleme könntest du dir auch dadurch einhandeln, weil du hier einen Klassennamen ("Array") als Variabel verwendest.

    Array["test"] = [];
    Array["test"]["lauf"] = [];
    Array["test"]["lauf"]["xy"]["default"] = element1;
    Array["test"]["lauf"]["uu"]["default"] = element2;
    Array["test"]["lauf"]["xu"]["default"] = element3;

    Weiterhin sind das eigentlich keine Arrays sondern Objekte. Ob sich darauf Sortierfunktionen anwenden lassen, weiss ich nicht, da man ja nicht mit einem Index drauf zugreifen kann.

    Gruß!

    1. Probleme könntest du dir auch dadurch einhandeln, weil du hier einen Klassennamen ("Array") als Variabel verwendest.

      Ja stimmt, dummes Beispiel mit Array[, war aber nur zur Veranschaulichung gedacht, dass es sich um ein Array handelt.

  3. Hallo,

    mir faellt zu einer Aufgabenstellung ein konkreter Loesungsansatz nicht ein, obwohl ich entsprechende Seiten hinsichtlich sortieren von Arrays schon durchgelesen haben. Das Problem liegt in der Sortierabsicht eines mehrdimensionalen Array. Sachverhalt wie folgt:


    <element id="test1" order="2"/>
    <element id="test2" order="1"/>
    <element id="test3" order="4"/>

    var e1ement1 = document.getElementById('test1');
    var e1ement2 = document.getElementById('test2');
    var e1ement3 = document.getElementById('test3');

    Soweit ich erkennen kann, notierst Du Dir hier die Element- oder Text- oder Attributknoten oder was auch immer in den Variablen element1 bis elemnt3. Was, wenn es mehr Knoten werden, die Du zwischendurch ablegen musst?

    var Array = [];
    Array["test"] = [];
    Array["test"]["lauf"] = [];
    Array["test"]["lauf"]["xy"]["default"] = element1;
    Array["test"]["lauf"]["uu"]["default"] = element2;
    Array["test"]["lauf"]["xu"]["default"] = element3;

    Da ich relativ wenig mit JavaScript Erfahrung sammeln konnte bisher, weiss ich nicht, ob diese Notation zur Definition des Arrays wirklich korrekt ist. Ich kenne bisher nur die folgende:

    var meinArray = new Array(); bzw. für ein eindimensionales Array mit bekannter Dimension var meinArray = new Array(i);


    Aufruf der Sortierfunktion an folgender Stelle:

    Array["test"]["lauf"].sort(????);

    ???? muesste durch eine Suchfunktion ersetzt werden, die auf das order attribute im element zugreift und dann dadurch die Folge erzeugt:

    Array["test"]["lauf"]["uu"]["default"] = element2;
    Array["test"]["lauf"]["xy"]["default"] = element1;
    Array["test"]["lauf"]["xu"]["default"] = element3;

    Ob es auch char- bzw. string-Sorts gibt, weiss ich nicht. eine Möglichkeit wäre jedoch, falls das "uu", "xy" und "xu" strings sind, mit parseInt() in einen Integerwert umzurechnen. Die dritte Dimension (also das Order-Kriterium müsstest Du dann allerdings noch in ein separates, eindimensionales Hilfsarray packen und dieses dann durchsortieren lassen.

    In Perl. da bin ich eher zuhause würde ich an Deiner Stelle das Ganze mit einem assozitiven Array lösen. Aber für Javascript kenne ich (wie gesagt, ist kein Massstab) keine entsprechende Methode.

    Hoffe, ich konnte Dir dennoch den einen oder anderen Tip geben

    Gruss
    Gina

    --
    X-Self-Code: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:° ss:| de:] js:| ch:| sh:) mo:| zu:)
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
  4. var Array = [];
    Array["test"] = [];
    Array["test"]["lauf"] = [];
    Array["test"]["lauf"]["xy"]["default"] = element1;
    Array["test"]["lauf"]["uu"]["default"] = element2;
    Array["test"]["lauf"]["xu"]["default"] = element3;

    Das sind keine Arrays - zumindest wendest du sie nicht als solche an - und folglich funktionert auch nicht die Sortierfunktion des Arrayobjekts. Du musst dir eine eigene Sortierfunktion für deine Objekte schreiben

    Struppi.