Heim > Web-Frontend > js-Tutorial > Hauptteil

Wie implementiert man in JavaScript einen natürlichen Sortieralgorithmus für Arrays, die gemischte alphanumerische Elemente enthalten?

Susan Sarandon
Freigeben: 2024-11-09 16:06:02
Original
961 Leute haben es durchsucht

How do you implement a natural sort algorithm in JavaScript for arrays containing mixed alphanumeric elements?

Natürliche Sortierung von Array-Elementen mit Zahlen und Alphabeten

Die Bestimmung der Reihenfolge von Array-Elementen, die numerische Werte und alphabetische Zeichen enthalten, kann eine Herausforderung sein. Um dieses Szenario zu bewältigen, ist eine natürliche Sortierung erforderlich, die Elemente basierend auf ihren wahren Werten anordnet.

Beispielarray und gewünschtes Ergebnis

Betrachten Sie das folgende Eingabearray:

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

Die gewünschte Sortierreihenfolge ist:

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

Naiver Sortieransatz

Eine einfache Vergleichsfunktion, wie die bereitgestellte, sortiert die Elemente nur nach dem Anfangsteil (2 Buchstaben) und ignoriert den numerischen Teil:

function compare(a, b) {
  if (a < b) return -1;
  if (a > b) return 1;
  return 0;
}
Nach dem Login kopieren

Natürliche Sortierimplementierung in JavaScript

Um eine natürliche Sortierung zu erreichen, gehen Sie wie folgt vor Funktion kann verwendet werden:

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

Diese Funktion teilt jedes Element in ein Array von Paaren auf, wobei das erste Element eine Zahl (oder Unendlich, wenn keine Zahl) und das zweite Element eine Zeichenfolge ist:

["IL0 Foo"] -> [["0", "IL"], ["Foo", ""]]
["PI0 Bar"] -> [["0", "PI"], ["Bar", ""]]
Nach dem Login kopieren

Die Vergleichslogik vergleicht dann die Paare einzeln, wobei numerischen Werten Vorrang eingeräumt wird. Wenn die numerischen Werte gleich sind, werden die Zeichenfolgen mit localeCompare verglichen.

Beispielverwendung und Ergebnis

Sortieren des Beispielarrays mit der naturalCompare-Funktion:

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 ist:

["", "20", "20.jpg", "abc", "abc2", "abc2.jpg", "abc10", "abc10.jpg", "img1.png", "img2.png", "img10.png", "img12.png", "img101.png", "img101a.png"]
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie implementiert man in JavaScript einen natürlichen Sortieralgorithmus für Arrays, die gemischte alphanumerische Elemente enthalten?. 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