JavaScript: multiply array sort

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/javascript_multiply_array_sort_88386/page_1 - zur Vollversion wechseln!


leon schrieb am 06.08.2003 um 08:51

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


leon schrieb am 06.08.2003 um 20:06

danke an alle...habs schu gelöst
lg


Rektal schrieb am 07.08.2003 um 09:30

Deartiges Know-How ist hier gerne gesehen ;-)


grOOvekill@ schrieb am 12.08.2003 um 15:09

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 schrieb am 13.08.2003 um 11:57

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


atrox schrieb am 13.08.2003 um 12:05

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 schrieb am 13.08.2003 um 12:16

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 schrieb am 13.08.2003 um 12:31

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);




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025