Ich suche nach dem einfachsten Weg, ein Array zu sortieren, das aus Zahlen und Text besteht, und eine Kombination davon.
Z.B
'123asd'
'19asd'
'12345asd'
'asd123'
'asd12'
verwandelt sich in
'19asd'
'123asd'
'12345asd'
'asd12'
'asd123'
Dies wird in Kombination mit der Lösung einer anderen Frage verwendet, die ich hier gestellt habe .
Die Sortierfunktion an sich funktioniert. Was ich brauche, ist eine Funktion, die sagen kann, dass '19asd' kleiner als '123asd' ist.
Ich schreibe dies in JavaScript.
Bearbeiten: Wie Adormitu betonte, suche ich nach einer Funktion für die natürliche Sortierung
How do you do string comparison in JavaScript?
auf stackoverflow.com/questions/51165/…Antworten:
Dies ist jetzt in modernen Browsern mit localeCompare möglich. Durch Übergeben der
numeric: true
Option werden Zahlen intelligent erkannt. Sie können die Groß- und Kleinschreibung nicht berücksichtigensensitivity: 'base'
. Getestet in Chrome, Firefox und IE11.Hier ist ein Beispiel. Es kehrt zurück
1
, was bedeutet, dass 10 nach 2 geht:'10'.localeCompare('2', undefined, {numeric: true, sensitivity: 'base'})
Zur Leistung beim Sortieren einer großen Anzahl von Zeichenfolgen heißt es in dem Artikel:
quelle
Sie brauchen also eine natürliche Sorte ?
Wenn ja, dann ist dieses Drehbuch von Brian Huisman, das auf David Koelles Arbeit basiert , vielleicht genau das , was Sie brauchen.
Es scheint, als ob Brian Huismans Lösung jetzt direkt auf David Koelles Blog gehostet wird:
quelle
Um Werte zu vergleichen, können Sie eine Vergleichsmethode verwenden.
Um das Sortieren eines Arrays zu beschleunigen, müssen Sie das Array vor dem Sortieren manipulieren, sodass Sie die Konvertierungen in Kleinbuchstaben und den regulären Ausdruck nur einmal anstatt in jedem Schritt der Sortierung durchführen müssen.
quelle
String.prototype.tlc()
? Ist das dein eigener Code oder hast du ihn von irgendwoher bekommen? Wenn letzteres der Fall ist, verlinken Sie bitte auf die Seite.Wenn Sie eine Reihe von Objekten haben, können Sie Folgendes tun:
Code-Snippet anzeigen
quelle
Die ab 2019 am besten ausgestattete Bibliothek, um dies zu handhaben, scheint natürlich zu sein .
Es werden nicht nur Arrays von Zeichenfolgen benötigt, sondern es kann auch nach dem Wert eines bestimmten Schlüssels in einem Array von Objekten sortiert werden. Es kann auch automatisch Zeichenfolgen von Währungen, Daten, Währungen und einer Reihe anderer Dinge identifizieren und sortieren.
Überraschenderweise sind es auch nur 1,6 KB, wenn sie gezippt werden.
quelle
Stellen Sie sich eine 8-stellige Auffüllfunktion vor, die Folgendes transformiert:
Wir können die gepolsterten Zeichenfolgen verwenden, um '19asd' vor '123asd' zu sortieren.
Verwenden Sie den regulären Ausdruck
/\d+/g
, um alle Zahlen zu finden, die aufgefüllt werden müssen:Das Folgende zeigt das Sortieren mit dieser Technik:
Die Zwischenergebnisse zeigen, was die Routine natural_expand () tut, und geben Ihnen ein Verständnis dafür, wie die nachfolgende Routine natural_compare funktioniert:
Ausgänge:
quelle
Aufbauend auf der obigen Antwort von @Adrien Be und unter Verwendung des von Brian Huisman & David koelle erstellten Codes ist hier eine modifizierte Prototypsortierung für eine Reihe von Objekten:
quelle