Javascript array sort(), reverse()

Javascript array sortieren

array.sort () sortiert Arrays alphabetisch oder numerisch, aufsteigend oder absteigend. sort () sortiert die Elemente eines Arrays in lexikalischer Folge, wobei 30 vor 4 rangiert und 4 auf dem Index 5 liegt.

23-02-02 SITEMAP CSS HTML JS Basis JS Web Tutorial SVG

Wenn die Reihenfolge im Array wichtig ist

Das Sortieren von Zahlen oder Strings gehört in das Standardrepertoire jedes Programmierers. Dabei sollen Abläufe mit wiederholtem Verschieben von Elementen immer vermieden werden. Wenn nur Indizies oder Zeiger verändert werden, funktioniert das Sortieren viel viel schneller.

Da Javascript durch und durch objektorientiert ist, resultieren Verschiebe-Operationen beim Sortieren in Umhängen von Zeigern und bewegen keine großen Datenmengen.

Javascript Arrays haben bereits ein effizientes array.sort () eingebaut. Ohne weiteren Parameter werden die Elemente des Arrays in Strings konvertiert und miteinander verglichen.

const simpleNames = ['Schulze', 'Meier', 'Schulze', 
                     'Ämter', 'amtsmann', '17demut', 
                     '7demut', 'Liedermacher', 'Amtsmann'
                     ];
simpleNames.sort();

… und so sieht das sortierte Array anschließend aus:

    sort() ändert den Inhalt des Arrays.

    sort() ist case-sensitiv, also abhängig von Groß- und Kleinschreibung und sortiert in alphabetischer Reihenfolge – Javascript sort() agiert auf Unicode. Zahlen rangieren vor Buchstaben, Großbuchstaben rangieren vor kleinen Buchstaben, Umlaute wandern ans Ende.

    localeCompare

    Um Strings ohne Rücksicht auf Groß- und Kleinschreibung alphabetisch zu sortieren, und unter Berücksichtigung der Sprache des Browsers bringt l.toLowerCase().localeCompare(u.toLowerCase() alles auf einen Nenner.

    simpleNames.sort(function (l,u) {
        return l.toLowerCase().localeCompare(u.toLowerCase());
    });
    

      Mehr zu localeCompare

      array.sort sortiert mit einer Anweisung nicht nur einfache Arrays, sondern auch Arrays von Objekten wie JSON-Arrays anhand ihrer Daten.

      Und um den doppelten Schulze loszuwerden, schließt Javascript mit new Set(array) mehrfache Vorkommen in Arrays aus.

      Zahlen und Boolean sortieren

      Javascript wandelt Zahlen in Zeichenketten um, so dass 17 vor 7 rangiert. Um Zahlen zu sortieren, muss eine Funktion erzeugt und übergeben werden, die Zahlen vergleicht.

      let arrnum = [17, 511, 7, 1024, 4711, 0, -18, -8];
      arrnum.sort(function(a,b) {
          return a - b;
      });
      
      

      Und die Konsole zeigt

      
      
      
      let colors = new Array("rote Haare", "Grünton", "gelb", "Oliv", "Grauzone");
      let numbers = new Array (600, 204, 13, 2.4, 7, -15,3, -2.3e3);
      let bool = new Array (true, false, true, true, false);
      let mixed = new Array (100, "King Kong", 205, true);
      colors.sort();
      bool.sort();
      mixed.sort();
      numbers.sort();
      	
      console.log(colors + "\n" + bool + "\n" + mixed + "\n" + numbers);
      
      
      
      

      Aufsteigend, absteigend sortieren

      Wenn eine andere Sortierfunktion gefordert ist, kann eine Funktion als Argument übergeben werden. Diese Funktion soll zwei Werte vergleichen und einen Wert zurückgeben, der die Sortierreihenfolge vorgibt:

      • -1, wenn das erste Element vor dem folgenden stehen soll,
      • 1, wenn das zweite Element vor dem ersten rangieren soll,
      • 0, wenn die beiden Elemente gleich sind und in beliebiger Folge stehen können.

      Um Zahlen zu vergleichen, subtrahiert die Vergleichsfunktion nur die zweite von der ersten Zahl:

      let numbers = new Array (600, 204, 13, 2.4, 7, -15,3, -2.3e3);
      function numSort(a, b) { 
         return (a - b);
      } 
      numbers.sort(numSort);
      console.log(numbers);              // Ausgabe -2300,-15,2.4,3,7,13,204,600
      
      
      
      		

      Nach Stringlänge sortieren

      let trees = new Array("Kokospalme", "Rotbuch", "Tanne", "Birke", "Ahornbaum");
      
      function len(a, b) {
         let sort = (a.length < b.length) ? -1 : (b.length < a.length) ? 1 : 0;
         return sort;
      }
      
      trees.sort(len);
      alert(trees);              // Ausgabe: Tanne,Birke,Rotbuch,Ahornbaum,Kokospalme
      

      Die Funktion len(a, b) vergleicht die Länge zweier Strings und gibt -1 zurück, wenn a länger als b ist, 1, wenn b länger als a ist und 0 sonst. trees.sort(len) sortiert das Array trees nach der Länge der Strings.

      
      		

      Mehrdimensionale Arrays sortieren

      Wenn a und b selber Arrays sind, erzeugt ein mathematischer Vergleich nicht die gewünschten Ergebnisse. Wir müssen ihre inneren Werte vergleichen und sie dann nach einem Kriterium sortieren. Alle anderen Werte des Arrays werden also zu Beiwerk degradiert.

      let poi = [
          [17, "Amanda Saubermann"],
          [3, "Jonas vom Berge"],
          [90, "Zephir der Kluge"],
          [121, "Sturmhöhe"]];
          
      poi.sort(function(a, b){
          return a[0] - b[0];
      });
      
      console.log (poi);
      

      Liefert

      [3, "Jonas vom Berge"]
      [17, "Amanda Saubermann"]
      [90, "Zephir der Kluge"]
      [121, "Sturmhöhe"]
      

      IP-Adressen mit Javascript sortieren

      IP-Adressen muss man in Javascript nicht als mehrdimensionales Array sorteren. IP-V4-Adressen sind lange Zahlen, die zur besseren Lesbarkeit in vier Blöcke unterteilt sind.

      const ips = ["66.249.66.77","40.77.167.244","54.236.1.11","157.55.39.239"];
      
      ips.sort((a, b) => {
              const num1 = Number(a.split(".").map((num) => (`000${num}`).slice(-3) ).join(""));
              const num2 = Number(b.split(".").map((num) => (`000${num}`).slice(-3) ).join(""));
              return num1-num2;
      });
      
      for (const item of ips) {
      	document.querySelector(".result.ips").innerHTML += item + "\n"
      }
      
      
      
      
      			

      Es gibt auch eine ebenso einfach Javascript-Funktion, die eine Zahl in eine IP-Adresse umwandelt. Sie wird hier allerdings nicht gebraucht.

      function num2dot1(num) {
         let part1 = num & 255;
         let part2 = ((num >> 8) & 255);
         let part3 = ((num >> 16) & 255);
         let part4 = ((num >> 24) & 255);
         return part4 + "." + part3 + "." + part2 + "." + part1;
      }
      

      Quelle: IP-Adressen in Dezimalzahl und zurück ipaddress to decimal and back

      IP V4-Adressen eingeben (pro Zeile) und sortieren:

      array.reverse() – Array umdrehen

      Javascript reverse kehrt die Reihenfolge der Elemente in einem Array um.

      const days = ["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag"];
      days.reverse();
      console.log ("days", days);
      
      
      ▼ days
        ▼ Array (5)
         0 "Freitag"
         1 "Donnerstag"
         2 "Mittwoch"
         3 "Dienstag"
         4 "Montag"
      
      

      Der Aufruf days.reverse(); kehrt die Reihenfolge der Array-Elemente um. Das letzte Element wird zum ersten Element, das erste zum letzten.

      let trees = new Array("Kokospalme", "Rotbuch", "Tanne", "Birke");
      let len = trees.unshift("Weide", "Pappel");
      alert("trees " + trees + " len " + len);
      

      let len = trees.unshift("Weide", "Pappel"); fügt die Elemente mit dem Wert "Weide" und "Pappel" am Anfang des Arrays trees ein und speichert die neue Anzahl der Arrayelement in der Variablen len.

      
      		

      array.valueOf()

      Arrays in Javascript erben die Methode valueOf vom Objekt Object. valueOf gibt einen primitiven Wert für das angegebene Array zurück. Überschreibt die Methode Object.valueOf().
      Syntax: Array.valueOf()