Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sortowanie z uwzględnieniem polskich znaków, funkcja porównująca
Pacio
post
Post #1





Grupa: Zarejestrowani
Postów: 105
Pomógł: 27
Dołączył: 30.10.2005
Skąd: Lublin

Ostrzeżenie: (0%)
-----


Witam,

Napisałem funkcję porównującą do sortowania elementów tablicy, która uwzględnia polskie znaki, ale wydaje mi się, że można to zrobić rozsądniej/wydajniej/krócej. Macie jakieś inne rozwiązania tego zagadnienia?

Moje rozwiązanie:
  1. var tab = new Array('Jabłko', 'czereśnia', 'mandarynka--', 'Żurawina', 'Gruszka', 'jabłko', 'Mandarynka-', 'śliwa', 'Banan', 'Malina', 'Truskawka');
  2.  
  3. function sortPL(a, b) {
  4. a = a.toLowerCase();
  5. b = b.toLowerCase();
  6.  
  7. order = new Array('a', 'ą', 'b', 'c', 'ć', 'd', 'e', 'ę', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'ł', 'm', 'n', 'ń', 'o', 'ó', 'p', 'r', 's', 'ś', 't', 'u', 'w', 'y', 'z', 'ź', 'ż');
  8. length = a.length > b.length ? b.length : a.length;
  9.  
  10. for ( i=0; i <= length; i++ ) {
  11. if ( i == length ) {
  12. return a.length > b.length ? 1 : -1;
  13. }
  14. if ( order.indexOf(a[i]) != -1 && order.indexOf(b[i]) != -1 ) {
  15. if ( order.indexOf(a[i]) > order.indexOf(b[i]) ) {
  16. return 1;
  17. } else if ( order.indexOf(a[i]) < order.indexOf(b[i]) ) {
  18. return -1;
  19. }
  20. } else {
  21. if ( a[i] != b[i] ) {
  22. return ( a[i] > b[i] ) - ( a[i] < b[i] );
  23. }
  24. }
  25. }
  26. }
  27. console.debug(tab); // przed
  28. console.debug(tab.sort(sortPL)); // po
  29. console.debug(tab.sort()); // domyślne sortowanie JS


Kod
Przed:
["Jabłko", "czereśnia", "mandarynka--", "Żurawina", "Gruszka", "jabłko", "Mandarynka-", "śliwa", "Banan", "Malina", "Truskawka"]
Po:
["Banan", "czereśnia", "Gruszka", "Jabłko", "jabłko", "Malina", "Mandarynka-", "mandarynka--", "śliwa", "Truskawka", "Żurawina"]

Domyślne sortowanie JS bez funkcji porównującej:
["Banan", "Gruszka", "Jabłko", "Malina", "Mandarynka-", "Truskawka", "czereśnia", "jabłko", "mandarynka--", "śliwa", "Żurawina"]


--------------------
Mój Blog Militarny: http://1rBlog.pl
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 07:49