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"]
Die gewünschte Sortierreihenfolge ist:
["IL0 Foo", "IL3 Bob says hello", "IL10 Baz", "PI0 Bar"]
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; }
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; }
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", ""]]
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)
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"]
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!