JavaScript: multiply array sort
leon 06.08.2003 - 08:51 492 7
leon
Back from Banland
|
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
|
danke an alle...habs schu gelöst lg
|
Rektal
Here to stay
|
Deartiges Know-How ist hier gerne gesehen ;-)
|
grOOvekill@
LegendVienna Badass
|
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
|
habe eine schleife geschrieben die es die alles sortiert : 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!
|
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
|
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
|
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: 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)
|