Heim > Web-Frontend > js-Tutorial > Wie sortiert man ein Array mit Elementen, die sowohl Zeichenfolgen als auch Zahlen enthalten, in natürlicher Reihenfolge, z. B. „img12.png' und „img10.png'?

Wie sortiert man ein Array mit Elementen, die sowohl Zeichenfolgen als auch Zahlen enthalten, in natürlicher Reihenfolge, z. B. „img12.png' und „img10.png'?

Mary-Kate Olsen
Freigeben: 2024-12-16 15:53:17
Original
950 Leute haben es durchsucht

How do you sort an array with elements containing both strings and numbers in a natural order, like

Natürliche Sortierung von Array-Elementen mit String- und numerischen Komponenten

In einigen Fällen stoßen wir auf Arrays, die Elemente enthalten, die einem bestimmten Format folgen, z als Strings mit eingebetteten Zahlen. Solche Arrays in einer logischen Reihenfolge zu sortieren, die als „natürliche Sortierung“ bezeichnet wird, stellt eine Herausforderung dar.

Herausforderung

Stellen Sie sich ein Array wie:

["IL0 Foo", "PI0 Bar", "IL10 Baz", "IL3 Bob says hello"]
Nach dem Login kopieren
Um das Gewünschte zu erreichen Sortierung:

["IL0 Foo", "IL3 Bob says hello", "IL10 Baz", "PI0 Bar"]
Nach dem Login kopieren

Lösung

Natürliche Sortierung erfordert eine Vergleichsfunktion, die sowohl die numerischen als auch die Textkomponenten innerhalb jedes Elements berücksichtigt. Hier ist eine JavaScript-Implementierung:

function naturalCompare(a, b) {
    var ax = [], bx = [];

    a.replace(/(\d+)|(\D+)/g, function(_, , ) { ax.push([ || Infinity,  || ""]) });
    b.replace(/(\d+)|(\D+)/g, function(_, , ) { bx.push([ || Infinity,  || ""]) });

    while(ax.length && bx.length) {
        var an = ax.shift();
        var bn = bx.shift();
        var nn = (an[0] - bn[0]) || an[1].localeCompare(bn[1]);
        if(nn) return nn;
    }

    return ax.length - bx.length;
}
Nach dem Login kopieren

Erklärung

    Die Funktion ersetzt alle Ziffern oder Nichtziffern durch ein Array von Unterarrays.
  • Die Elemente jedes Subarrays repräsentieren die numerischen und textuellen Komponenten des entsprechenden Teilzeichenfolge.
  • Die Funktion durchläuft die Unterarrays beider Zeichenfolgen und vergleicht zuerst numerische Werte und dann Textwerte.
  • Wenn ein numerischer Vergleich nicht schlüssig ist, führt die Funktion einen lexikografischen Vergleich der Textkomponenten durch .
  • Die Spanne zwischen den Längen der verbleibenden Subarrays für jede Zeichenfolge bestimmt das Natürliche Bestellung.

Beispiel

test = [
    "img12.png",
    "img10.png",
    "img2.png",
    "img1.png",
    "img101.png",
    "img101a.png",
    "abc10.jpg",
    "abc10",
    "abc2.jpg",
    "20.jpg",
    "20",
    "abc",
    "abc2",
    ""
];

test.sort(naturalCompare)
Nach dem Login kopieren
Das sortierte Array wäre:

Das obige ist der detaillierte Inhalt vonWie sortiert man ein Array mit Elementen, die sowohl Zeichenfolgen als auch Zahlen enthalten, in natürlicher Reihenfolge, z. B. „img12.png' und „img10.png'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage