Sortowanie tablicy obiektów w JavaScript

Sortowanie tablicy obiektów w JavaScript (kreator komparatora) | We.Inc

Zbuduj komparator kliknięciami: sortuj obiekty według liczby, tekstu, daty lub dwóch kluczy, z opcjami localeCompare, i zobacz wynik oraz kod obok siebie.

Sortowanie tablicy obiektów w JavaScript

Przekaż do sort funkcję porównującą, która patrzy na interesującą Cię właściwość. Dla liczb zwróć a.price - b.price. Dla tekstu zwróć a.name.localeCompare(b.name). Dla dat odejmij znaczniki czasu. Wynik ujemny stawia a pierwsze, dodatni stawia pierwsze b. Użyj toSorted zamiast sort, gdy oryginalna kolejność musi zostać zachowana.

Komparator dla każdego rodzaju klucza

Sortowanie obiektów sprawia ludziom kłopot z trzech powodów: domyślne sortowanie porównuje wszystko jako tekst, przy zwykłym porównaniu mniejsze niż wielkie litery trafiają przed małe, a sort nadpisuje przekazaną tablicę. Kreator poniżej pozwala przełączać każdy z tych przełączników na małej liście zespołu i obserwować zmianę kolejności, z pasującym komparatorem gotowym do skopiowania.

Najczęściej zadawane pytania

Jak posortować tablicę obiektów według właściwości?

Wywołaj people.sort((a, b) => a.age - b.age) dla właściwości liczbowej lub people.sort((a, b) => a.name.localeCompare(b.name)) dla tekstowej. Zamień a i b, aby odwrócić kierunek.

Jak sortować według dwóch pól?

Porównaj pierwsze pole i przejdź do drugiego tylko wtedy, gdy pierwsze daje remis: (a, b) => a.team.localeCompare(b.team) || a.age - b.age. || działa, bo remis zwraca 0, które liczy się jako false.

Czy sort w JavaScript jest stabilne?

Tak. Od ECMAScript 2019 sort musi być stabilne, więc elementy uznane za równe zachowują wcześniejszą kolejność. Dlatego sortowanie najpierw po imieniu, a potem po zespole daje listę pogrupowaną według zespołów z imionami w kolejności w każdej grupie.

Czy sort zmienia oryginalną tablicę?

Tak. sort zmienia kolejność tablicy w miejscu i zwraca tę samą tablicę. toSorted przyjmuje tę samą funkcję porównującą, ale zwraca nową tablicę i nie rusza oryginalnej kolejności. Jest dostępne we wszystkich głównych przeglądarkach od lipca 2023.

Dlaczego imiona z małej litery są sortowane po tych z wielkiej?

Zwykłe porównanie < lub > porównuje kody znaków, a każda wielka litera ma niższy kod niż każda mała. localeCompare stosuje zamiast tego alfabet danego języka, a z { sensitivity: 'base' } traktuje też akcenty i wielkość liter jako równe.

Co naprawdę zwraca funkcja porównująca

Daty, brakujące wartości i mieszane typy

Dlaczego zwykłe sort() źle sortuje liczby

Bez funkcji porównującej każdy element jest zamieniany na tekst i porównywany według jednostek kodu UTF-16, więc wygrywa pierwszy znak.

Domyślna kolejność kontra komparator liczbowy

Domyślnie 100 ląduje przed 25, bo tekst '1' jest przed '2'.

Sortowanie po wielu kluczach, z uwzględnieniem języka i bez mutacji

Zespół od A do Z, potem od najstarszych, bez ruszania oryginału

Łańcuch || przechodzi do następnego klucza tylko wtedy, gdy poprzednie porównanie daje 0. toSorted zwraca nową tablicę.

Jeden Intl.Collator dla długiej listy

numeric: true ustawia T-2 przed T-10, a sensitivity: 'base' ignoruje wielkość liter i akcenty.

Pomocnicza funkcja sortBy do wielokrotnego użycia

Przekaż nazwy kluczy w kolejności. Minus przed kluczem sortuje ten klucz malejąco.

Kreator komparatora

Wybierz sposób sortowania przykładowej listy zespołu, a tabela i kod zaktualizują się razem.

Sortuj według

Następnie według (przy remisie)

Nic

Kierunek

Rosnąco

Malejąco

Porównanie tekstu

Zwykłe < i >

localeCompare

localeCompare, numeryczne i bez rozróżniania wielkości liter

Przykładowa lista używana przez kreator komparatora (oryginalna kolejność)

Wynik komparatora

Komparator

Kopiuj kod

Zacznij za darmo · Bez karty kredytowej

Powiązane: Poradniki

Produkt

Dla kogo

Funkcje

Zasoby

Firma

Mapa strony