Załóżmy, że masz taką klasę JavaScript
var DepartmentFactory = function(data) {
this.id = data.Id;
this.name = data.DepartmentName;
this.active = data.Active;
}
Powiedzmy, że następnie tworzysz kilka instancji tej klasy i przechowujesz je w tablicy
var objArray = [];
objArray.push(DepartmentFactory({Id: 1, DepartmentName: 'Marketing', Active: true}));
objArray.push(DepartmentFactory({Id: 2, DepartmentName: 'Sales', Active: true}));
objArray.push(DepartmentFactory({Id: 3, DepartmentName: 'Development', Active: true}));
objArray.push(DepartmentFactory({Id: 4, DepartmentName: 'Accounting', Active: true}));
Chciałbym teraz mieć tablicę obiektów utworzonych przez DepartmentFactory
. Jak miałbym korzystać z array.sort()
metody sortowania tej tablicy obiektów według DepartmentName
właściwości każdego obiektu?
array.sort()
Metoda działa dobrze podczas sortowania tablica ciągów
var myarray=["Bob", "Bully", "Amy"];
myarray.sort(); //Array now becomes ["Amy", "Bob", "Bully"]
Ale jak sprawić, by działała z listą obiektów?
javascript
jdavis
źródło
źródło
DepartmentFactory
jako konstruktora, twórz jego obiekty za pomocąnew DepartmentFactory
, w przeciwnym razie tablica zostanie wypełniona wiązkąundefined
wartości.Odpowiedzi:
musiałbyś zrobić coś takiego:
Uwaga: zmiana wielkości liter na górną lub dolną zapewnia sortowanie bez rozróżniania wielkości liter.
źródło
return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;
Nie będę redagował twojej odpowiedzi, mając nadzieję, że przynajmniej zapamiętam tę kłótnię :)Aby obsługiwać Unicode:
źródło
return a.DepartmentName.toLowerCase().localeCompare(b.DepartmentName.toLowerCase());
localeCompare
jest fajny i obsługuje wszystkie przeglądarki dla pierwszego argumentu. Nie jest zły!localeCompare
polega na tym, aby zrzucić pracę zarządzania logiką sortowania i dziwactwami lokalnymi w systemie. Jeśli sortowanie bez rozróżniania wielkości liter jest normalne w przypadku ustawień regionalnych, tak jak w języku angielskim, zostanie to zrobione za Ciebie:"Z" > 'a' // false
"Z".localeCompare('a') // 1
Jeśli chcesz odstąpić od ustawień domyślnych ustawień regionalnych, możesz przesłać przesłonięcia w parametrachlocales
ioptions
: developer.mozilla. org / en-US / docs / Web / JavaScript / Reference /…demo: http://jsfiddle.net/diode/hdgeH/
źródło
źródło
PRÓBNY
źródło
źródło
zrób to w ten sposób
źródło
Sortuje je alfabetycznie ORAZ nie uwzględnia wielkości liter. Jest również bardzo czysty i łatwy do odczytania: D
źródło
Oto prosta funkcja, za pomocą której można sortować tablicę obiektów według ich właściwości; nie ma znaczenia, czy właściwość jest typem ciągu lub liczbą całkowitą, zadziała.
źródło
Musisz przekazać funkcję, która akceptuje dwa parametry, porównuje je i zwraca liczbę, więc zakładając, że chcesz je posortować według identyfikatora, napiszesz ...
źródło
Po trochę wypróbowaniu tego i próbowaniu stworzenia mniejszej liczby pętli, jak to możliwe, skończyłem z tym rozwiązaniem:
Demo na codepen
źródło
Prosta odpowiedź:
Sposób ES6:
Jeśli chcesz, aby to było małe / wielkie litery itp., Po prostu zrób to i zapisz wynik w zmiennej, niż porównaj tę zmienną. Przykład:
źródło