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"]