Markus: Array sortieren

Hallo auch,

ich habe folgendes, vermutlich komplexes Problem (zumindest spielt es sich mir gerade als solches im Kopf ab):

Ich habe ein Array nach folgendem Muster:

  
function rec(a,b,c,d) {  
  this.a = a;  
  this.b = b;  
  this.c = c;  
  this.d = d;  
}  
  
var data = new Array();  
data[0] = new rec("hans", "test", "13", "100");  
data[1] = new rec("peter", "lala", "14", "100");  
data[2] = new rec("franz", "albrecht", "18", "120");  

Nun möchte ich das Array sortieren (nach Verschiedenen möglichkeiten):
Erstens: Numerisch nach Parameter c
Die Lösung dafür habe ich gefunden:

  
function numSort(a,b) {  
  return parseInt(a) - parseInt(b);  
}  
  
data.sort(numSort);  

Zweitens (und das ist mein eigentliches Problem):
Ich möchte nach dem Parameter b sortieren, also "test", "lala", und "albrecht".

data.sort() geht natürlich nicht, da im Array data nur Objekte sind. Aber wie bekomm ich die sort Funktion dahingehend zum Arbeiten, dass ich nacher nach Parameter b sortiert habe?

Vielen Dank bereits im Voraus.

MFG

Markus

  1. hi,

    Nun möchte ich das Array sortieren (nach Verschiedenen möglichkeiten):
    [...]
    Zweitens (und das ist mein eigentliches Problem):
    Ich möchte nach dem Parameter b sortieren, also "test", "lala", und "albrecht".

    data.sort() geht natürlich nicht,

    Doch, geht.

    da im Array data nur Objekte sind. Aber wie bekomm ich die sort Funktion dahingehend zum Arbeiten, dass ich nacher nach Parameter b sortiert habe?

    In dem du ihr als Parameter die Referenz auf eine Vergleichsfunktion übergibst, die zwei Objekte als Parameter entgegennimmt, die gewünschten Eigenschaften vergleicht und davon abhängig einen Returnwert zurückliefert.

    In der Beschreibung zu Array.sort() steht das noch mal ausführlicher beschrieben.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. In dem du ihr als Parameter die Referenz auf eine Vergleichsfunktion übergibst, die zwei Objekte als Parameter entgegennimmt, die gewünschten Eigenschaften vergleicht und davon abhängig einen Returnwert zurückliefert.

      Entweder stehe ich nach wie vor auf dem Schlauch oder du hast nicht alles gelesen was ich geschrieben habe (das möchte ich dir nicht unterstellen). Was die Funktion anbelangt, die ich .sort übergeben kann, weiß ich nur, wie es mir Zahlen funktioniert. Nicht aber mit Buchstaben.

      Wenn die Funktion so einfach ist, kannst du mir sie ja vielleicht liefern. Ich habe lange überlegt, bin aber nicht darauf gekommen.

  2. Sup!

    Also wenn

    function numSort(a,b) {
      return a.a - b.a;
    }

      
    für den ersten Parameter auch geht, dann kommst Du vielleicht drauf...  
      
    Gruesse,  
      
    Bio
    
    -- 
    Never give up, never surrender!!!
    
    1. function numSort(a,b) {
        return a.a - b.a;
      }

      
      >   
      > für den ersten Parameter auch geht, dann kommst Du vielleicht drauf...  
        
      Das ist ja mein Problem, das tue ich nicht. Denn der Code ist für mich für numerische sortierung logisch. Wie ich da jetzt allerdings auch Buchstaben sortieren könnte ist mir rätselhaft. Daher die Frage.  
        
      Gruss  
        
      Markus
      
  3. So, ich habe inzwischen selbst die Lösung gefunden.
    Habe bei der ganzen Überlegerei vergessen, dass ich auch Google hätte fragen können.

    Die Lösung fürs Archiv (Kurzfassung):

      
    return(a==b)?0:(a>b)?1:-1;  
    
    
    1. Sup!

      Die Lösung fürs Archiv (Kurzfassung):

      return(a==b)?0:(a>b)?1:-1;

        
      Und wie sortierst Du z.B. nach dem dritten Parameter?  
        
      Gruesse,  
        
      Bio
      
      -- 
      Never give up, never surrender!!!
      
      1. Sup!

        Die Lösung fürs Archiv (Kurzfassung):

        return(a==b)?0:(a>b)?1:-1;

        
        >   
        > Und wie sortierst Du z.B. nach dem dritten Parameter?  
          
        Warum nach dem dritten? Es gibt doch immer nur zwei.  
        Diese Codezeile steckt in einer Funktion textSort(a, b) und in Verbindung mit array.sort(textSort) genutzt.  
        Die .sort Funktion ruft textSort immer mit zwei Parameter auf.  
          
        Gruss  
          
        Markus
        
        1. Sup!

          Warum nach dem dritten? Es gibt doch immer nur zwei.
          Diese Codezeile steckt in einer Funktion textSort(a, b) und in Verbindung mit array.sort(textSort) genutzt.

          Aber diese Funktion bekommt zwei Objekte/Strukturen, in Deinem Fall mit vier Properties/Members, übergeben.

          Wenn Du jetzt zwei Objekte nach ihrem dritten Member sortieren willst, was dann?

          Gruesse,

          Bio

          --
          Never give up, never surrender!!!