Loading:

Promocja Helion.pl

JavaScript Funkcja sort (Metoda obiektu: Array)

Sortuje elementy tablicy.

Metoda obiektu: Array

Parametry


compareFunction -jest nazwą funkcji porównującej elementy. Jeżeli parametr zostanie pominięty, tablica będzie posortowana w porządku leksykograficznym (alfabetycznie).


Opis


Jeżeli compareFunction nie zostanie podana, elementy zostaną posortowane leksykograficznie (alfabetycznie - słownikowo) według porównania ich reprezentacji znakowej (łańcucha znaków). Przykładowo "80" znajdzie się przed "9" w porządku leksykograficznym, pomimo że numerycznie 9 poprzedza 80.

Jeżeli compareFunction zostanie podana, elementy tablicy zostaną posortowane odpowiednio do wartości zwracanej przez funkcję porównującą. Jeżeli a oraz b są dwoma porównywanymi elementami tablicy to:


compareFunction(a, b) zwróci wartość mniejszą od 0 - indeks elementu b będzie mniejszy niż indeks a (logicznie b < a).


compareFunction(a, b) zwróci 0 - pozostawia a oraz b w niezmienionej kolejności względem siebie, jednak w dalszym ciągu oba będą porównywane z innymi elementami (logicznie b = a). Uwaga: Standard ECMAscript nie gwarantuje niezmienionej kolejności (np. Mozilla wszystkie wersje do 2003 roku).


compareFunction(a, b) zwraca wartość większą od 0 - indeks elementu b będzie większy niż indeks a (logicznie b > a).

Ogólna postać funkcji porównującej wygląda następująco:

function compare(a, b) {

   if (a mniejsze niż b wg. kryteriów sortowania)

      return -1

   if (a większe od b wg. kryteriów sortowania)

      return 1

   // a równe b

   return 0

}



W celu porównania liczb, zamiast napisów, funkcja porównująca może odejmować b od a:

function compareNumbers(a, b) {
   return a - b
}




Niektóre implementacje JavaScript wykonują sortowanie stabilne: kolejność elementów a i b nie jest zmieniana jeśli a i b są sobie równe. Jeżeli przed sortowaniem a jest w tablicy wcześniej niż b oraz a i b są sobie równe, to po sortowaniu ich kolejność będzie taka sama (niezależnie od tego, jak zmienią się pozycje elementów a i b).

W SpiderMonkey oraz wszystkich przeglądarkach opartych o Mozillę sortowanie nie jest stabilne. Błąd błąd 224128 opisuje postęp wprowadzania sortowania stabilnego.

Zachowanie metody sort zmieniono pomiędzy JavaScript 1.1 i JavaScript 1.2.

W JavaScript 1.1, na niektórych platformach metoda sort nie działała. Metoda ta działa na wszystkich platformach dla JavaScript 1.2.

W JavaScript 1.2, metoda ta nie konwertuje już niezdefiniowanych elementów do wartości null; zamiast tego przenosi je na sam koniec tablicy. Na przykład następujący skrypt:

<SCRIPT>
a = new Array();
a[0] = "Ant";
a[5] = "Zebra";

function writeArray(x) {
   for (i = 0; i < x.length; i++) {
      document.write(x[i]);
      if (i < x.length-1) document.write(", ");
   }
}

writeArray(a);
a.sort();
document.write("<BR><BR>");
writeArray(a);
</SCRIPT>




W JavaScript 1.1, JavaScript wypisze:

ant, null, null, null, null, zebra
ant, null, null, null, null, zebra



W JavaScript 1.2, JavaScript wypisze:

ant, undefined, undefined, undefined, undefined, zebra
ant, zebra, undefined, undefined, undefined, undefined



Przykłady


Przykład: Tworzenie, wyświetlanie i sortowanie tablic


Następujący przykład tworzy cztery tablice i wyświetla oryginalną tablicę, potem posortowane tablice. Tablice liczbowe są sortowane najpierw bez podania funkcji porównującej, następnie z taką funkcją.

<SCRIPT>
stringArray = new Array("Blue","Humpback","Beluga")
numericStringArray = new Array("80","9","700")
numberArray = new Array(40,1,5,200)
mixedNumericArray = new Array("80","9","700",40,1,5,200)

function compareNumbers(a, b) {
   return a - b
}

document.write("tablicaNapisów: " + stringArray.join() +"<BR>")
document.write("Posortowana: " + stringArray.sort() +"<P>")

document.write("tablicaLiczbowa: " + numberArray.join() +"<BR>")
document.write("Posortowana bez funkcji porównującej: " + numberArray.sort() +"<BR>")
document.write("Posortowana z funkcją porównującą: " + numberArray.sort(compareNumbers) +"<P>")

document.write("tablicaNapisówLiczbowych: " + numericStringArray.join() +"<BR>")
document.write("Posortowana bez funkcji porównującej: " + numericStringArray.sort() +"<BR>")
document.write("Posortowana z funkcją porównującą: " + numericStringArray.sort(compareNumbers) +"<P>")

document.write("tablicaLiczbowaMieszna: " + mixedNumericArray.join() +"<BR>")
document.write("Posortowana bez funkcji porównującej: " + mixedNumericArray.sort() +"<BR>")
document.write("Posortowana z funkcją porównującą: " + mixedNumericArray.sort(compareNumbers) +"<BR>")
</SCRIPT>




Ten przykład wyświetla następujące dane. Jak widać, przy zastosowaniu funkcji porównującej, liczby są sortowane prawidłowo niezależnie od tego czy są przedstawiane jako wartości liczbowe bądź też napisy.

tablicaNapisów: Blue,Humpback,Beluga
Posortowana: Beluga,Blue,Humpback




tablicaLiczbowa: 40,1,5,200
Posortowana bez funkcji porównującej: 1,200,40,5
Posortowana z funkcją porównującą: 1,5,40,200




tablicaNapisówLiczbowych: 80,9,700
Posortowana bez funkcji porównującej: 700,80,9
Posortowana z funkcją porównującą: 9,80,700




tablicaLiczbowaMieszna: 80,9,700,40,1,5,200
Posortowana bez funkcji porównującej: 1,200,40,5,700,80,9
Posortowana z funkcją porównującą: 1,5,9,40,80,200,700

 



Napisz Artykuł

Listing

niema


Ten wpis posiada swój wątek na forum

Wszystkie pytania prosimy kierować właśnie tam ponieważ komentarze to miejsce na poprawki do kodu lub alternatywne rozwiązania i pytania nie będą publikowane

http://forum.funkcje.net/forum/viewtopic.php?f=3&t=2765

Dane do logowania na forum są takie same jak na funkcje.net



Dodano przez: igor
Ranga: Administrator serwisu Punktów: 28716
Komentarze użytkowników
    • Treść komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-17 v.1.5 | design: diviXdesign & rainbowcolors