Mam tablicę (patrz poniżej jeden obiekt w tablicy), którą muszę posortować według imienia za pomocą JavaScript. Jak mogę to zrobić?
var user = {
bio: null,
email: "[email protected]",
firstname: "Anna",
id: 318,
lastAvatar: null,
lastMessage: null,
lastname: "Nickson",
nickname: "anny"
};
javascript
Jonathan Clark
źródło
źródło
Odpowiedzi:
Załóżmy, że masz tablicę
users
. Możesz użyćusers.sort
i przekazać funkcję, która pobiera dwa argumenty i porównać je (komparator)Powinien powrócić
W naszym przypadku, jeśli dwa elementy są
a
ib
chcemy porównaća.firstname
ib.firstname
Przykład:
Ten kod będzie działał z dowolnym typem.
Zauważ, że w „prawdziwym życiu” ™ często chcesz ignorować wielkość liter, poprawnie sortować znaki diakrytyczne, dziwne symbole, takie jak ß itp. Podczas porównywania ciągów, więc możesz chcieć użyć
localeCompare
. Zobacz inne odpowiedzi dla jasności.źródło
localeCompare
.Najkrótszy możliwy kod z ES6!
Podstawowa obsługa String.prototype.localeCompare () jest uniwersalna!
źródło
Coś takiego:
źródło
'a'>'A' //true
'z'>'a' //true
'A'>'z' //false
'Zebra'
wyżej niż łańcuch'apple'
, co zrobi, jeśli go nie użyjesz.toLowerCase()
.'Z' < 'a' // true
oraz'z' < 'a' // false
W porównaniu struny zawierać znaki Unicode można użyć
localeCompare
funkcji zString
klasy tak:źródło
users.sort((a, b) => a.name.localeCompare(b.name))
Miły mały jeden wkładka ES6:
źródło
Możemy użyć localeCompare, ale musimy również sprawdzić klucze pod kątem wartości falsey
Poniższy kod nie będzie działał, jeśli brakuje jednej nazwy lname.
Musimy więc sprawdzić wartość falsey jak poniżej
LUB
możemy użyć lodash, to bardzo proste. Wykryje zwrócone wartości, tj. Liczbę lub ciąg znaków, i odpowiednio posortuje.
https://lodash.com/docs/4.17.5#sortBy
źródło
underscorejs oferuje bardzo przyjemną funkcję _.sortBy:
lub możesz użyć niestandardowej funkcji sortowania:
źródło
sortBy
wykryte zwracane wartości są łańcuchami, a zatem dokonuje sortowania alfabetycznego? DziękiW przypadku, gdy mamy do sortowania nazw lub coś ze znaków specjalnych, takich jak ń lub aeiou (świetlicy w języku hiszpańskim) możemy wykorzystać params lokalizacje ( es dla hiszpańskiego w tym przypadku) i opcje jak poniżej:
Oficjalne opcje ustawień regionalnych można znaleźć tutaj w iana , es (hiszpański), de (niemiecki), fr (francuski). O podstawie wrażliwości oznacza:
źródło
Zasadniczo możesz sortować tablice za pomocą metody sortowania, ale jeśli chcesz sortować obiekty, musisz przekazać funkcję, aby posortować metodę tablicy, więc dam ci przykład za pomocą tablicy
źródło
else
usuwać? W przeciwnym raziereturn 0
nigdy nie zostanie to odczytaneZainspirowany tą odpowiedzią
źródło
Bardziej zwarta notacja:
źródło
sign(f(a, b)) =-sign(f(b, a))
(dla a = b)a.firstname == b.firstname
należy użyć===
do kompletnościtakże dla sortowania asec i desc, możesz użyć tego: załóżmy, że mamy zmienną SortType, która określa sortowanie rosnące lub malejące, jakie chcesz:
źródło
Uogólnioną funkcję można zapisać jak poniżej
możesz przekazać poniższe parametry
źródło
próbować
Pokaż fragment kodu
źródło
[9,8,7,6,5,1,2,3].sort((a,b) => a<b ? -1 : 1)
Możesz użyć tego do obiektów
źródło
jednym słowem możesz użyć tej metody
źródło
Możesz użyć wbudowanej metody tablicowej
sort
. Ta metoda przyjmuje parametr zwrotny jako parametrKluczowe punkty, na które należy zwrócić uwagę, aby zrozumieć ten kod.
myCustomSort
powinna zwracać +1 lub -1 dla każdej pary elementów (z tablicy wejściowej).toLowerCase()
/toUpperCase()
w niestandardowej metodzie zwrotnej sortowania, aby różnica wielkości liter nie wpływała na poprawność procesu sortowania.Mam nadzieję, że to dość jasne wytłumaczenie. Jeśli uważasz, że możesz dodać komentarz, potrzebujesz więcej informacji.
Twoje zdrowie!
źródło
Wrzuciłem najlepsze odpowiedzi do prototypu, aby posortować według klucza.
źródło
Możesz użyć czegoś podobnego, aby pozbyć się rozróżniania wielkości liter
źródło
Moja implementacja działa świetnie w starszych wersjach ES:
źródło
Dla przypomnienia, jeśli chcesz mieć nazwaną funkcję sortowania, składnia jest następująca:
Pamiętaj, że następujące NIE działa:
źródło