JavaScript: Adressliste sortieren hat Probleme mit gleichen Namen...

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • JavaScript: Adressliste sortieren hat Probleme mit gleichen Namen...

    Hallo!

    Ich habe einen Sortieralgorythmus nach dem Vorbild von aktuell.de.selfhtml.org/artikel/dhtml/tabellen-sortieren/ gebaut. Nun stehe ich allerdings vor dem Problem, dass dieser Algorythmus so nicht mit gleichen Vor- oder Nachnamen klar kommt.

    Die problematische Stelle ist:

    Quellcode

    1. for(i = 0; i < Zeilen; ++i)
    2. for(var j = 0; j < Zeilen; ++j)
    3. if(Spaltendaten[i] == Vergleichsdaten[j])
    4. SortierIndex[i] = j;


    Was passiert? Die beiden Arrays Spaltendaten und Vergleichsdaten werden verglichen. Im Falle des Sortierens nach den Nachnamen repräsentiert das Array Spaltendaten eine sortierte Liste der Nachnamen und das Array Vergleichsdaten den Ur-Zustand der Nachnamen. Beim Vergleichen wird nun geschaut an welcher Stelle der nächste Nachnamen in der Ur-Liste steht. Der Index wird in einem weiteren Array gespeichert und daraus ergibt sich dann ein Array mit der richtigen Reihenfolge der Ur-Daten. Enthält das Array SortierIndex also die Ziffern 4, 6, 2 und 9, so heißt das, dass in der sortierten Tabelle der Eintrag 4 an erster Stelle stehen muss und so weiter. Hierzu muss man wissen, dass eine Zeile der Tabelle 5 Einträgen im Ur-Array entspricht. Sonst könnte ich ja einfach die sortierte Liste der Nachnamen ausgeben. Ich hoffe, das war soweit verständlich.

    Das Problem ist also nun folgendes. Der Nachname "Günther" taucht zum Beispiel 2 mal in den Adressdaten auf. Beim Vergleichen der Arrays findet er auf der Suche nach "Günther" aber selbstverständlich 2 mal den gleichen bzw. überschreibt den anderen. Wie kann ich ihn davon abhalten? Allerdings ist mir jetzt beim Formulieren eben aufgefallen, dass er ihn ja tatsächlich überschreibt. Darum wird mir jetzt auch klar, warum meine bisherigen Lösungsversuche nicht funktioniert haben. Ich denke es ist der richtige Ansatz ihn gleich davon abzuhalten den ersten zu überschreiben. Mal sehen, ob das klappt. Ich würde mich trotzdem über eine Antwort freuen, wenn jemand schon eine Idee hat.

    Vielen Dank im Voraus!
    Rantan
  • Es gibt aber ein Problem. Das klappt leider nur bei einem Doppel... wenns einen Wert dreifach gibt, klappt das schon wieder nicht.
    Auf die Schnelle fällt mir da nur ein hässlicher Workaround ein:

    Quellcode

    1. if(Spaltendaten[i] == Vergleichsdaten[j]) {
    2. var check = true;
    3. for(var k=i; k>0; k--) {
    4. if(SortierIndex[k] == j)
    5. check = false;
    6. }
    7. if(check) SortierIndex[i] = j;