var BetterListModel = function() {
this.allItems = ko.observableArray([
{ name: 'Denise' },
{ name: 'Charles' },
{ name: 'Bert' }
]); // Initial items
this.sortItemsAscending = function() {
this.allItems(this.allItems().sort(function(a, b) { return a.name > b.name;}));
};
this.sortItemsDescending = function() {
this.allItems(this.allItems().sort(function(a, b) { return a.name < b.name;}));
};
};
linie wyjaśnił: weWiliChangeTheArrayToValue (weWilSortTheArrayWithASpecialFunction (ComparatorFunction))
ComparatorFunction tj .
function(a, b) { return a.name < b.name;}
to specjalna funkcja, która ułatwia sortowanie funkcji sortowania.
Wymaga 2 argumentów i porównuje je zwracając true, jeśli pierwszy argument jest "większy" (powinien być dalej na liście) i false, jeśli pierwszy argument jest "mniejszy"
Każdy (prawie) algorytm sortowania działa poprzez porównanie 2 elementów sortowanej kolekcji, aż wszystko będzie w porządku.
Zmiana kolejności odbywa się poprzez upewnienie się, że funkcja zwraca false kiedy to return true normalnie - Najprostszym sposobem na to jest poprzez zmianę pracy>, aby <
EDIT jeszcze jedno: jeśli porównać nie- Znaki ASCII używają powrotu a.localCompare (b); (I powrót b.localCompare (a)), a gdy chodzi o numery stosowania „-” sing więc jest to operacja arytmetyczna
EDIT2
ostrzegawcze powyższej metody „>” może zerwać z duplikatów w tablicy użyciu
return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
zamiast (lub tylko localCompare)
Czy możesz edytować odpowiedź na rosnące i malejące sortowanie? Jestem zdezorientowany, co to jest aib? – Ahmed
"a" i "b" nie są zmiennymi, których używasz w swojej aplikacji, są to w rzeczywistości niektóre zmienne losowe z funkcji sortowania, ponieważ funkcje sortowania muszą otrzymać 2 parametry do sortowania 2 elementów, prawda? :) – dpaul1994
Ogólnie przyjmuje się, że wyjaśniasz próbkę kodu, a nie tylko podajesz kopię i wklejasz odpowiedź. Pomoże to przyszłym użytkownikom, którzy tu przybyli, w poszukiwaniu większej ilości informacji na ten temat. –