Loading:


    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




    Dodano przez: igor
    Ranga: Administrator serwisu Punktów: 0
    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-2025 v.1.5 | design: diviXdesign & rainbowcolors