pyro: Array nach 2 Kriterien sortieren

Hallo zusammen,

ich habe ein zweidimensionales Array,
das ich gerne sortieren würde. Nach
einem Kriterium kann ich schon sortieren,
nur soll es jetzt nach einer Spalte und
dann danach nach einer zweiten Spalten
sortiert werden. Im Moment sieht der
Code so aus:

function ov_mySort2_auf(a, b) {
  var tmp1 = parseInt( a[0] );
  var tmp2 = parseInt( b[0] );
  return tmp1 > tmp2 ? 1 :
  tmp1 < tmp2 ? -1 :
  a[0] > b[0] ? 1 :
  a[0] < b[0] ? -1 :
  0;
}

Damit sortiert das Script nur nach
Spalte 0, es soll aber anschließend
noch innerhalb dieser Sortierung
noch mal nach Spalte 1 sortieren.

schueler=new Array()
schueler[0]=new Array("m",4,"Stefan");
schueler[1]=new Array("m",2,"Michael");
schueler[2]=new Array("w",1,"Anne");
schueler[3]=new Array("w",3,"Verena");
schueler[4]=new Array("w",2,"Elena");
schueler[5]=new Array("m",6,"Hans");

es soll dann sortieren:
schueler[0]=new Array("m",2,"Michael");
schueler[1]=new Array("m",4,"Stefan");
schueler[2]=new Array("m",6,"Hans");
schueler[3]=new Array("w",1,"Anne");
schueler[4]=new Array("w",2,"Elena");
schueler[5]=new Array("w",3,"Verena");

Danke
Alex

  1. Hi,

    function ov_mySort2_auf(a, b) {
      var tmp1 = parseInt( a[0] );
      var tmp2 = parseInt( b[0] );
      return tmp1 > tmp2 ? 1 :
      tmp1 < tmp2 ? -1 :
      a[0] > b[0] ? 1 :
      a[0] < b[0] ? -1 :
      0;
    }

    Damit sortiert das Script nur nach
    Spalte 0, es soll aber anschließend
    noch innerhalb dieser Sortierung
    noch mal nach Spalte 1 sortieren.

    "Anschliessend" heisst, wenn die Werte in Spalte 0 bei a und b gleich sind.
    Also nimm das noch als zusätzliche Bedingung auf.

    (Die Bedingungen mal in der "ausführlichen" Schreibweise als if-else-Statements zu schreiben, statt mit dem ternären Operator, könnte dabei zum Verständnis hilfreich sein.)

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  2. @@pyro:

    nuqneH

    Im Moment sieht der Code so aus:
    function ov_mySort2_auf(a, b) {
    --8<--
    }

    Den Code kannst du entsorgen.

    Zum Sortieren von Arrays gibt es eine http://de.selfhtml.org/javascript/objekte/array.htm#sort@title=Methode.

    schueler=new Array()

    Ich wäre gern lokal.

    var schueler = new Array();

    es soll dann sortieren:

    schueler.sort();

    Qapla'

    --
    Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
  3. Hallo pyro,

    in meinem Tabellensortierer benutze ich folgende Funktion (hier etwas vereinfacht):

     var VglFkt_n=function(a,b) {  
      var ret=parseFloat(a[ssort])-parseFloat(b[ssort]);  
      if(!ret && ssort!=defsort) {  
        ret=parseFloat(a[defsort])-parseFloat(b[defsort])  
      }  
      return ret;  
     }
    

    wobei erst nach Spalte "ssort" sortiert wird, und dann nach Spalte "defsort".

    Gruß, Jürgen