Heim > Web-Frontend > js-Tutorial > Wie sortiere ich Arrays mit Zeichenfolgen, die Zahlen in natürlicher Reihenfolge enthalten?

Wie sortiere ich Arrays mit Zeichenfolgen, die Zahlen in natürlicher Reihenfolge enthalten?

Barbara Streisand
Freigeben: 2024-11-17 19:18:01
Original
528 Leute haben es durchsucht

How to Sort Arrays with Strings Containing Numbers in Natural Order?

Natürliche Array-Elementsortierung: Zeichenfolgen mit Zahlen

Dieser Artikel befasst sich mit der Aufgabe, Arrays zu sortieren, die Elemente enthalten, die Zeichenfolgen und Zahlen in einem kombinieren natürliche Reihenfolge, bei der numerische Sequenzen innerhalb der Zeichenfolgen beim Sortierprozess berücksichtigt werden sollten.

Das Problem

Stellen Sie sich ein Array wie dieses vor:

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

Wenn wir versuchen, dieses Array mit einer herkömmlichen Sortierfunktion zu sortieren, erhalten wir möglicherweise eine falsche Reihenfolge:

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

Die Lösung: Natürliche Sortierung

Um eine natürliche Sortierung zu erreichen, können wir die folgende JavaScript-Funktion nutzen:

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 tokenisiert die Eingabezeichenfolgen in Arrays numerischer und nicht numerischer Werte. Anschließend werden die Arrays lexikografisch verglichen, wobei die numerischen Werte als Ganzzahlen und die nicht numerischen Werte als Zeichenfolgen berücksichtigt werden.

Beispiel

Anwenden dieser Funktion auf das angegebene Array ergibt die gewünschte natürliche Sortierreihenfolge:

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)
document.write("<pre class="brush:php;toolbar:false">" + JSON.stringify(test,0,3));
Nach dem Login kopieren

Dies erzeugt das folgende sortierte Array:

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

Das obige ist der detaillierte Inhalt vonWie sortiere ich Arrays mit Zeichenfolgen, die Zahlen in natürlicher Reihenfolge 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