Array sortieren
Daniel
- javascript
Hallo zusammen
Ich habe das folgende Script, in welchem Daten in einen Array und anschliessend in ein Pulldown-Menu geladen werden. Aus irgendeinem Grund kann ich diesen Array mit dem .sort() Befehl einfach nicht nach ABC sortieren, die Daten werden in irgendeiner Reihenfolge in das Pulldownmenu geladen. Kann mir jemand sagen woran das liegt? Danke. Gruss Daniel.
Beim laden des Dokuments, function createmenu(), werden die Daten in ein Pulldown-Menu geladen. Bei der Auswahl eines Pulldownmenu-Eintrags, function show(), wird dann dynamisch die entsprechende Tabelle angezeigt.
<script language="javascript">
function loadarray() {
var data = new Array();
//#####################Enter your values here##################################################################################
data[0] = new Array();
data[0]["title"] = "Formular Beispiel";
data[0]["formpath"] = "formular.html";
data[0]["formname"] = "Formular1.doc";
data[0]["text"] = "Noch Fragen?";
data[1] = new Array();
data[1]["title"] = "Formular Test";
data[1]["formpath"] = "test.html";
data[1]["formname"] = "Formular1.doc";
data[1]["text"] = "Alles klar?";
data[2] = new Array();
data[2]["title"] = "Testform";
data[2]["formpath"] = "testform.html";
data[2]["formname"] = "testform.xls";
data[2]["text"] = "Bitte ausfüllen";
data[3] = new Array();
data[3]["title"] = "xml";
data[3]["formpath"] = "test.html";
data[3]["formname"] = "Word-Dokument";
data[3]["text"] = "Nach dem Ausfüllen bitte an KTMV";
//#####################Enter your values here##################################################################################
data=data.sort();
return data;
}
function show() {
data=loadarray();
document.all.title.innerText = data[document.form2.auswahl.value]["title"];
document.all.forms.innerHTML = "<a href="" + data[document.form2.auswahl.value]["formpath"] + "" target="_blank">"+ data[document.form2.auswahl.value]["formname"] + "<\a>";
document.all.text.innerHTML = data[document.form2.auswahl.value]["text"];
}
function createmenu(){
data=loadarray();
var a="";
a="<form name="form2"><select name="auswahl" onchange="show()">";
for (var i=0;i<data.length;i++)
{
a=a+("<option value="+i+">"+data[i]["title"]+"</option>");
}
a=a+"</select></form>";
document.all.test.innerHTML = a;
show();
}
</script>
Hallo,
[Array sort()ieren]
var data = new Array();
//#####################Enter your values here##################################################################################
Hast Du das Skript geschrieben?
data[0] = new Array();
data[1] = new Array();
data[2] = new Array();
data[3] = new Array();
data=data.sort();
return data;
Hier sortierst Du das Array data, welches in jedem Element ein Array enthält. Wenn jetzt also der Inhalt der Elemente in eine Zeichenkette umgewandelt wird, dann sind vermutlich alle Elemente gleichwertig, weil sie ein Object Array() enthalten.
Im Prinzip müsstest Du sort() (wie in <selfhtml.teamone.de/javascript/objekte/array.htm#sort> beschrieben) eine Vergleichsroutine übergeben, in der Du die Inhalte des assoziativen Arrays miteinander vergleichst.
Folgendes Beispiel funktioniert zumindes im NN4.7 (sollte also auch in allen anderen Browsern gehen).
var c = new Array();
c[0] = new Array();
c[0]["a"] = "c";
c[1] = new Array();
c[1]["a"] = "b";
c[2] = new Array();
c[2]["a"] = "d";
c[3] = new Array();
c[3]["a"] = "f";
c[4] = new Array();
c[4]["a"] = "e";
c[5] = new Array();
c[5]["a"] = "a";
function compare (a,b) {
if ( a["a"] > b["a"] ) return 1;
if ( a["a"] == b["a"] ) return 0;
if ( a["a"] < b["a"] ) return -1;
}
c.sort(compare);
for (i = 0; i < c.length; i++) {
document.writeln(c[i]["a"] + "<br>");
}
Gruß Alex
Hallo
Danke für die Antwort, obwohl ich den Lösungsansatz für mein Problem nicht verstehe. Wo muss ich jetzt was ändern, bzw. einfügen..?!
Ja, das Script habe ich selbst geschrieben...
Gruss Daniel
Hallo,
Danke für die Antwort, obwohl ich den Lösungsansatz für mein Problem nicht verstehe. Wo muss ich jetzt was ändern, bzw. einfügen..?!
Du hast ein mehrdimensionales Array, das Du nach einer höheren Dimension sortieren willst. sort() sortiert - wenn nicht anderweitig per Vergleichsroutine vorgegeben - aber nur nach der "untersten" Dimension.
Ja, das Script habe ich selbst geschrieben...
Dann schaffst Du es auch, das Beispiel auf Dein Skript zu übertragen. Einfach die Funktion kopieren und Variablennamen sowie Bedingungen anpassen. :)
Gruß Alex