"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

JavaScript: multiply array sort

leon 06.08.2003 - 08:51 492 7
Posts

leon

Back from Banland
Avatar
Registered: Mar 2003
Location: graz
Posts: 21
hab ein kleines problem und komm nimma weiter:
ich hab 4 arrays die alle in verbindung stehen (pos.0 der arrays gehören zusammen)
1.nachname
2.vorname
3.anrede
4.punkte
diese sollen nun per punkte sortiert werden...wenn ich aber nur das eine array sortiere, sortieren sich die anderen nicht mit. meine nächste lösung war: ich verbinde sie zu einem array...hab sie dann sortiert hat aber nicht funktioniert weil alles dann lexikalisch sortiert worden is
dann hab ich es mit dem trick:
function vergleich(a,b){
return a - b;
}
probiert aber das hat auch nicht funktioniert weil ich für diese function nur zahlen haben darf...
fällt euch noch was ein???
danke und lg
Bearbeitet von atrox am 13.08.2003, 12:08 (damn thread title)

leon

Back from Banland
Avatar
Registered: Mar 2003
Location: graz
Posts: 21
danke an alle...habs schu gelöst
lg

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4452
Deartiges Know-How ist hier gerne gesehen ;-)

grOOvekill@

Legend
Vienna Badass
Avatar
Registered: Nov 2001
Location: @home
Posts: 2301
Zitat von leon
danke an alle...habs schu gelöst
lg

Na zuppa! Vielleicht wärst du auch so nett und beglückst uns alle mit der Lösung des Problems? Könnte ja sein, daß der eine oder andere irgendwann vor einem ähnlichen Problem steht, dann käme dieser Thread genau richtig, nän?

leon

Back from Banland
Avatar
Registered: Mar 2003
Location: graz
Posts: 21
habe eine schleife geschrieben die es die alles sortiert :
Code:
function sortPunkte(){
    for(b=0;b<punkte.length-1;b++){
      if(punkte[b]<punkte[b+1]){
        z=punkte[b]
        punkte[b]=punkte[b+1]
        punkte[b+1]=z
				
        c=anrede[b]
        anrede[b]=anrede[b+1]
        anrede[b+1]=c
				
        d=nachname[b]
        nachname[b]=nachname[b+1]
        nachname[b+1]=d
				
        e=vorname[b]
        vorname[b]=vorname[b+1]
        vorname[b+1]=e
      }
    }
  for(a=0;a<nachname.length;a++){
      eins.innerHTML+=punkte[a]+"<p>"; 
      zwei.innerHTML+=nachname[a]+"<p>";
      drei.innerHTML+=vorname[a]+"<p>";	
      vier.innerHTML+=anrede[a]+"<p>";	
  }
}

Erklärung ich überprüfe in einer Schleifen ob die punkte an der stelle der variable in der schleife größer sind als die punkte an der variablenstelle+1 ...wenn das so ist werden alle stellen der 4 arrays gleichzeitig verschoben...das geht dann solange bis ich den höchsten punkte wert an der 1. bzw. [0] stelle hab...
dann kommt nur mehr die ausgabe...
lg
Bearbeitet von atrox am 13.08.2003, 12:07 (readability)

atrox

in fairy dust... I trust!
Avatar
Registered: Sep 2002
Location: HTTP/1.1 404
Posts: 2782
irre ich mich, oder fehlt bei diesem bubblesort nicht noch eine weitere schleife ? nach einem durchlauf von sortPunkte() ist nur sichergestellt, daß das größte element ganz hinten steht, aber nicht, daß das kleinste ganz vorne steht.

leon

Back from Banland
Avatar
Registered: Mar 2003
Location: graz
Posts: 21
sorry...die hab ich vergessen zu kopieren....natürlich is da noch eine zweite davor gewesen...

function sortPunkte(){
fuenf.innerHTML=" ";
eins.innerHTML=" ";
zwei.innerHTML=" ";
drei.innerHTML=" ";
vier.innerHTML=" ";
for(a=0;a<punkte.length;a++){
for(b=0;b<punkte.length-1;b++){
if(punkte[b]<punkte[b+1]){
z=punkte[b]
punkte[b]=punkte[b+1]
punkte[b+1]=z

c=anrede[b]
anrede[b]=anrede[b+1]
anrede[b+1]=c

d=nachname[b]
nachname[b]=nachname[b+1]
nachname[b+1]=d

e=vorname[b]
vorname[b]=vorname[b+1]
vorname[b+1]=e
}
}
}
for(a=0;a<nachname.length;a++){
eins.innerHTML+=punkte[a]+"<p>";
zwei.innerHTML+=nachname[a]+"<p>";
drei.innerHTML+=vorname[a]+"<p>";
vier.innerHTML+=anrede[a]+"<p>";
}
}

nochmals sorry wollte keinen verwirren

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4452
In so einem Fall ist es vielleicht nicht uninteressant objekte zu verwenden die die Information halten, ein normales Array das die Objekte aufnimmt und dann eine compare Function fuer das Array da die Browserinterne sortierung sicher effizienter ist:

Code:
var obj;
var daten = new Array;

function Person(anrede, vorname, nachname, punkte) {
    this.anrede = anrede;
    this.vorname = vorname;
    this.nachname = nachname;
    this.punkte = punkte;
    this.toString = function() {
		return this.anrede + ' ' + this.vorname + ' ' + this.nachname + ': ' + this.punkte;
	}
}

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

// objekte mit daten fuellen und ins array verpacken
obj = new Person('Frau', 'Vorname', 'Nachname', 200);
daten.push(obj);
obj = new Person('Mann', 'Vorname', 'Nachname', 100);
daten.push(obj);

// .. alle daten ins array fuellen und array sortieren
alert(daten);
daten.sort(comparePunkte);
alert(daten);
Bearbeitet von Rektal am 14.08.2003, 07:42 (clarity)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz