JavaScript Array sort ()

Metoda JavaScript Array sort () sortuje elementy tablicy.

sort()Metoda sortuje elementy danej tablicy w określonym porządku rosnącym lub malejącym.

Składnia sort()metody to:

 arr.sort(compareFunction)

Tutaj arr jest tablicą.

sort () Parametry

sort()Sposób odbywa się:

  • CompareFunction (opcjonalny) - służy do definiowania niestandardowej kolejności sortowania.

Wartość zwracana z sort ()

  • Zwraca tablicę po posortowaniu elementów tablicy w miejscu (co oznacza, że ​​zmienia oryginalną tablicę i nie jest kopiowana).

Przykład 1: Sortowanie elementów tablicy

Gdy funkcja compareFunction nie jest przekazywana,

  • Wszystkie undefinedelementy niebędące tablicami są najpierw konwertowane na łańcuchy.
  • Te ciągi są następnie porównywane przy użyciu ich wartości punktu kodowego UTF-16.
  • Sortowanie odbywa się w kolejności rosnącej.
  • Wszystkie undefinedelementy są sortowane do końca tablicy.
 // sorting an array of strings var names = ("Adam", "Jeffrey", "Fabiano", "Danil", "Ben"); // returns the sorted array console.log(names.sort()); // modifies the array in place console.log(names); var priceList = (1000, 50, 2, 7, 14); priceList.sort(); // Number is converted to string and sorted console.log(priceList)

Wynik

 („Adam”, „Ben”, „Danil”, „Fabiano”, „Jeffrey”) („Adam”, „Ben”, „Danil”, „Fabiano”, „Jeffrey”) (1000, 14, 2, 50 , 7)

Tutaj widzimy, że tablica nazw jest posortowana w kolejności rosnącej ciągu. Na przykład Adam jest przed Danilem, ponieważ „A” jest przed „D”.

Ponieważ wszystkie niezdefiniowane elementy są konwertowane na ciągi przed ich sortowaniem, Numbertypy danych są sortowane w tej kolejności.

Tutaj widzimy, że chociaż 1000 jest liczbowo większe niż 50 , pojawia się na początku posortowanej listy. Dzieje się tak, ponieważ „1” <„5” .

Przykład 2: Sortowanie przy użyciu funkcji niestandardowej

Gdy funkcja compareFunction jest przekazywana,

  • Wszystkie undefinedelementy niebędące tablicami są sortowane zgodnie z wartością zwracaną funkcji compareFunction.
  • Wszystkie niezdefiniowane elementy są sortowane do końca tablicy i funkcja compareFunction nie jest dla nich wywoływana.

Załóżmy, że chcemy posortować powyższą tablicę nazw tak, aby najdłuższa nazwa była ostatnia, zamiast sortować ją alfabetycznie. Możemy to zrobić w następujący sposób:

 // custom sorting an array of strings var names = ("Adam", "Jeffrey", "Fabiano", "Danil", "Ben"); function len_compare(a, b)( return a.length - b.length; ) // sort according to string length names.sort(len_compare); console.log(names);

Wynik

 („Ben”, „Adam”, „Danil”, „Jeffrey”, „Fabiano”)

Tutaj sortowanie jest oparte na logice a.length - b.length. Zasadniczo oznacza to, że element o krótszej długości pojawi się na początku Array.

Najpierw zrozumiemy, jak compareFunctiondziała opcja .

Any compareFunctionma następującą składnię:

 function (a, b)( // sorting logic // return a Number )

sort()Sposób porównuje wszystkie wartości tablicy przepuszczając dwie wartości w czasie do compareFunction. Dwa parametry a i b reprezentują odpowiednio te dwie wartości.

compareFunctionPowinien zwrócić Number. Ta zwrócona wartość służy do sortowania elementów w następujący sposób:

  • Jeśli zwrócona wartość <0 , a jest sortowane przed b (a występuje przed b).
  • Jeśli zwrócona wartość> 0 , b jest sortowane przed a (b znajduje się przed a).
  • Jeśli zwrócona wartość == 0 , a i b pozostają niezmienione względem siebie.

W przykładzie 2 sortujemy tablicę za pomocą:

 function len_compare(a, b)( return a.length - b.length; )

Tutaj:

  • Jeśli a.length - b.length <0 , a występuje przed b. Na przykład „Adam” występuje przed „Jeffrey” jako 4 - 7 <0 .
  • Jeśli a.length - b.length> 0 , b występuje przed a. Na przykład „Danil” pojawia się po „Ben” jako 5 - 3> 0.
  • Jeśli a.length - b.length == 0 , ich pozycja pozostaje niezmieniona. Na przykład względne położenie „Jeffrey” i „Fabiano” pozostaje niezmienione, ponieważ 7 - 7 == 0 .

Widzimy, że skutkuje to sortowaniem ciągów według ich długości w porządku rosnącym.

Przykład 3: Sortowanie liczb numerycznie

Ponieważ wszystkie niezdefiniowane elementy są konwertowane na ciągi przed ich sortowaniem, nie możemy domyślnie sortować liczb, używając ich wartości liczbowych.

Zobaczmy, jak możemy to zaimplementować za pomocą funkcji niestandardowej.

 // numeric sorting // define array var priceList = (1000, 50, 2, 7, 14); // sort() using function expression // ascending order priceList.sort(function (a, b) ( return a - b; )); // Output: Ascending - 2,7,14,50,1000 console.log("Ascending - " + priceList); // sort() using arrow function expression // descending order priceList.sort((a, b) => b - a); // Output: Descending - 1000,50,14,7,2 console.log("Descending - " + priceList);

Wynik

 Rosnąco - 2,7,14,50,1000 Malejąco - 1000,50,14,7,2

W tym przykładzie posortowaliśmy tablicę za pomocą:

 function (a, b) ( return a - b; )

Tutaj,

  • Jeśli a - b <0 , a występuje przed b. Na przykład 2 występuje przed 7 jako 2 - 7 <0 .
  • Jeśli a - b> 0 , b występuje przed a. Na przykład 1000 występuje po 50, a 1000-50> 0.

Widzimy, że powoduje to sortowanie liczb według ich rosnącej wartości liczbowej.

Podobnie możemy b - aposortować je w porządku malejącym. Zauważ, że możemy również użyć wyrażenia funkcji strzałki zdefiniowanego w ES2015.

Posortowaną tablicę możemy również odwrócić (malejąco) za pomocą wbudowanej reverse()metody tablicowej . Aby dowiedzieć się więcej, odwiedź JavaScript Array reverse ().

Interesujące artykuły...