Szukam najłatwiejszego sposobu posortowania tablicy składającej się z liczb i tekstu oraz ich kombinacji.
Na przykład
'123asd'
'19asd'
'12345asd'
'asd123'
'asd12'
zamienia się w
'19asd'
'123asd'
'12345asd'
'asd12'
'asd123'
Będzie to używane w połączeniu z rozwiązaniem innego pytania, które tutaj zadałem .
Funkcja sortowania sama w sobie działa, potrzebuję funkcji, która może powiedzieć, że „19asd” jest mniejsze niż „123asd”.
Piszę to w JavaScript.
Edycja: jak wskazał adormitu , szukam funkcji naturalnego sortowania
How do you do string comparison in JavaScript?
na stackoverflow.com/questions/51165/…Odpowiedzi:
Jest to teraz możliwe w nowoczesnych przeglądarkach korzystających z localeCompare. Pomijając
numeric: true
opcję, inteligentnie rozpozna liczby. Możesz rozróżniać wielkość liter przy użyciusensitivity: 'base'
. Przetestowano w Chrome, Firefox i IE11.Oto przykład. Wraca
1
, co oznacza, że 10 idzie po 2:'10'.localeCompare('2', undefined, {numeric: true, sensitivity: 'base'})
Aby uzyskać wydajność podczas sortowania dużej liczby ciągów, artykuł mówi:
źródło
Więc potrzebujesz naturalnego gatunku ?
Jeśli tak, to może ten scenariusz Briana Huismana oparty na pracy Davida Koelle'a byłby tym, czego potrzebujesz.
Wygląda na to, że rozwiązanie Briana Huismana jest teraz bezpośrednio hostowane na blogu Davida Koelle'a:
źródło
Aby porównać wartości, możesz użyć metody porównawczej -
Ale aby przyspieszyć sortowanie tablicy, ustaw tablicę przed sortowaniem, tak aby konwersje na małe litery i wyrażenie regularne były wykonywane tylko raz, a nie w każdym kroku sortowania.
źródło
String.prototype.tlc()
? Czy to twój własny kod, czy skądś go masz? Jeśli to drugie, podaj link do strony.Jeśli masz tablicę obiektów, możesz zrobić to w następujący sposób:
Pokaż fragment kodu
źródło
Najbardziej w pełni funkcjonalna biblioteka do obsługi tego od 2019 wydaje się być naturalnie uporządkowana .
Nie tylko pobiera tablice ciągów, ale także może sortować według wartości określonego klucza w tablicy obiektów. Może również automatycznie identyfikować i sortować ciągi: walut, dat, waluty i wielu innych rzeczy.
Zaskakujące jest to, że po skompresowaniu gzip ma tylko 1,6 kB.
źródło
Wyobraź sobie 8-cyfrową funkcję wypełniania, która przekształca:
Możemy użyć wyściełanych ciągów, aby pomóc nam posortować „19asd” tak, aby pojawił się przed „123asd”.
Użyj wyrażenia regularnego,
/\d+/g
aby znaleźć wszystkie liczby, które należy uzupełnić:Poniżej przedstawiono sortowanie przy użyciu tej techniki:
Wyniki pośrednie pokazują, co robi procedura natural_expand () i pozwalają zrozumieć, jak będzie działać następna procedura natural_compare:
Wyjścia:
źródło
Opierając się na odpowiedzi @Adrien Be powyżej i używając kodu utworzonego przez Briana Huismana i Davida Koelle'a , oto zmodyfikowane sortowanie prototypów dla tablicy obiektów:
źródło