Array.prototype.sort()

Podsumowanie

Sortuje elementy tablicy.

Sk艂adnia

arr.sort([compareFunction])

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 a b臋dzie mniejszy ni偶 indeks b (logicznie a < b).
  • 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 a b臋dzie wi臋kszy ni偶 indeks b (logicznie a > b).

Og贸lna posta膰 funkcji por贸wnuj膮cej wygl膮da nast臋puj膮co:

function compare(a, b) {
   if (a mniejsze ni偶 b wed艂ug kryteri贸w sortowania)
      return -1
   if (a wi臋ksze od b wed艂ug 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).

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膮.

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
}

console.log("tablicaNapis贸w: " + stringArray.join())
console.log("Posortowana: " + stringArray.sort())

console.log("tablicaLiczbowa: " + numberArray.join())
console.log("Posortowana bez funkcji por贸wnuj膮cej: " + numberArray.sort())
console.log("Posortowana z funkcj膮 por贸wnuj膮c膮: " + numberArray.sort(compareNumbers))

console.log("tablicaNapis贸wLiczbowych: " + numericStringArray.join())
console.log("Posortowana bez funkcji por贸wnuj膮cej: " + numericStringArray.sort())
console.log("Posortowana z funkcj膮 por贸wnuj膮c膮: " + numericStringArray.sort(compareNumbers))

console.log("tablicaLiczbowaMieszna: " + mixedNumericArray.join())
console.log("Posortowana bez funkcji por贸wnuj膮cej: " + mixedNumericArray.sort())
console.log("Posortowana z funkcj膮 por贸wnuj膮c膮: " + mixedNumericArray.sort(compareNumbers))

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

Zobacz tak偶e