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"]
["IL0 Foo", "IL3 Bob says hello", "IL10 Baz", "PI0 Bar"]
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; }
Erklärung
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)
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!