JavaScriptsTexteffekte

Zeilen sortieren

Bringt eine Liste in Ordnung: alphabetisch nach deutschen Regeln, nach Zahl, nach Länge oder zufällig gemischt — mit Doppeltes-Entfernen.

Listen entstehen selten in der richtigen Reihenfolge. Eine Teilnehmerliste, eine Adressensammlung, eine Aufzählung von Stichwörtern — irgendwann will man sie sortiert haben, doppelte Einträge loswerden oder für eine Verlosung durchmischen. Dafür extra ein Tabellenprogramm zu öffnen, ist umständlich; dieses Script erledigt es direkt im Browser.

Fügt eure Liste ein — eine Zeile je Eintrag — und wählt die gewünschte Ordnung. Alphabetisch sortiert nach deutschen Regeln, das heißt: Ä steht bei A, Ö bei O, Ü bei U, und Groß- und Kleinschreibung entscheidet nicht über die Reihenfolge. Numerisch liest die Zahl am Zeilenanfang und sortiert danach — nützlich für Preislisten oder Platzierungen. Nach Länge hilft beim Aufräumen von Stichwortsammlungen, und zufällig ist die Losbüchse für Reihenfolgen aller Art.

Zwei Schalter kommen dazu. „Doppelte entfernen" behält von jedem Eintrag nur den ersten — praktisch bei zusammenkopierten Listen. „Leerzeilen entfernen" räumt die Lücken weg, die beim Kopieren aus PDF-Dateien und Tabellen fast immer entstehen. Unter dem Ergebnis steht, wie viele Zeilen übrig geblieben sind und wie viele dabei weggefallen sind.

Alles läuft im Browser; eure Liste wird nicht übertragen. Verwandtes: Suchen und Ersetzen ändert Inhalte statt Reihenfolgen, Wörter zählen misst den Umfang, und wenn ihr aus einer Liste per Zufall einen Gewinner ziehen wollt, ist der Losentscheid das passendere Werkzeug.

Texteffekte Baujahr 2026 läuft in deinem Browser
Script von kostenlose-javascripts.de

So funktioniert das Script

Das Script zerlegt den Text in Zeilen, schickt sie durch mehrere Bearbeitungsschritte und fügt sie wieder zusammen. Jeder Schritt ist für sich klein — interessant sind die Stellen, an denen die naheliegende Lösung falsch wäre.

zeilen.sort(function (a, b) {
  return a.trim().localeCompare(b.trim(), "de", { sensitivity: "base" });
});

Hier liegt der Kern. Ein einfaches zeilen.sort() ohne Argumente sortiert nach Zeichennummern — und dort steht das große Z (90) vor dem kleinen a (97) und das Ä (196) hinter allem anderen. „Zypern" käme also vor „Ägypten" und „belgien" hinter „Zypern". localeCompare mit der Sprachangabe "de" kennt dagegen die deutsche Sortierfolge und stellt das Ä zu den A. Die Angabe sensitivity: "base" bewirkt, dass Groß- und Kleinschreibung für die Reihenfolge keine Rolle spielt.

Der Rückgabewert einer Vergleichsfunktion folgt einer festen Regel: negativ, wenn a vor b gehört, positiv im umgekehrten Fall, null bei Gleichrang. Genau das liefert localeCompare, und genau deshalb passen die beiden so gut zusammen.

const treffer = zeile.replace(",", ".").match(/-?\d+(\.\d+)?/);
return treffer === null ? Infinity : Number(treffer[0]);

Für die numerische Sortierung wird aus jeder Zeile die erste Zahl geholt. Das Suchmuster liest sich so: ein optionales Minus, dann eine oder mehr Ziffern (\d+), dann optional ein Punkt mit weiteren Ziffern. Zeilen ohne Zahl bekommen Infinity — den größten Wert, den JavaScript kennt — und landen dadurch geschlossen am Ende, statt die Sortierung durcheinanderzubringen.

for (let i = liste.length - 1; i > 0; i--) {
  const j = Math.floor(Math.random() * (i + 1));
  const merker = liste[i];
  liste[i] = liste[j];
  liste[j] = merker;
}

Das ist das Fisher-Yates-Verfahren, die richtige Art, eine Liste zu mischen. Es läuft von hinten nach vorn und tauscht jedes Element mit einem zufällig gewählten aus dem noch nicht bearbeiteten vorderen Teil. Der oft gesehene Einzeiler liste.sort(() => Math.random() - 0.5) sieht schlauer aus, ist aber falsch: Er liefert kein gleichverteiltes Ergebnis, weil Sortierverfahren eine widerspruchsfreie Vergleichsfunktion voraussetzen — manche Reihenfolgen kommen dabei deutlich häufiger heraus als andere.

const schluessel = zeile.trim().toLowerCase();
if (gesehen[schluessel]) return false;
gesehen[schluessel] = true;

Doppelte werden über einen Merkzettel erkannt: ein Objekt, in dem jede bereits gesehene Zeile als Schlüssel steht. filter behält alle Zeilen, für die die Funktion true liefert. Dass vorher trim() und toLowerCase() angewandt werden, ist eine bewusste Entscheidung — „Ägypten" und „ägypten " gelten damit als derselbe Eintrag, was beim Zusammenkopieren von Listen fast immer gewollt ist.

Zum Anpassen: Für eine Sortierung nach der zweiten Spalte — etwa bei „Name; Ort" — zerlegt ihr in der Vergleichsfunktion jede Zeile zuerst mit split(";") und vergleicht dann teile[1]. Soll bei gleicher Länge zusätzlich alphabetisch sortiert werden, gebt ihr in der Längenfunktion bei Gleichstand den localeCompare-Wert zurück statt der Null.

Script für die eigene Homepage

Kopiert euch den kompletten Code und fügt ihn an der Stelle eurer Seite ein, an der das Script erscheinen soll. Er läuft ohne weitere Dateien und ohne fremde Server.

Mehr aus der Kategorie Texteffekte