Mam następujące obiekty korzystające z AJAX i zapisałem je w tablicy:
var homes = [
{
"h_id": "3",
"city": "Dallas",
"state": "TX",
"zip": "75201",
"price": "162500"
}, {
"h_id": "4",
"city": "Bevery Hills",
"state": "CA",
"zip": "90210",
"price": "319250"
}, {
"h_id": "5",
"city": "New York",
"state": "NY",
"zip": "00010",
"price": "962500"
}
];
Jak utworzyć funkcję do sortowania obiektów według price
właściwości w porządku rosnącym lub malejącym przy użyciu tylko JavaScript?
javascript
arrays
sorting
TomHankers
źródło
źródło
Odpowiedzi:
Sortuj domy według ceny w porządku rosnącym:
Lub po wersji ES6:
Część dokumentacji można znaleźć tutaj .
źródło
string1.localeCompare(string2)
do porównania ciągówlocaleCompare()
jest sprawa niewrażliwe . Jeśli chcesz rozróżniać małe i wielkie litery, możesz użyć(string1 > string2) - (string1 < string2)
. Wartości logiczne są wymuszane na liczby całkowite 0 i 1 w celu obliczenia różnicy.localeCompare()
dokumentacja pokazuje, że możesz jawnie stwierdzić, czy chcesz rozróżniać wielkość liter, sortowanie numeryczne i inne opcje.Oto bardziej elastyczna wersja, która pozwala tworzyć funkcje sortowania wielokrotnego użytku i sortować według dowolnego pola.
źródło
sort_by
działa w O (1) i zwraca funkcję używaną przez wbudowane sortowanie (O (N log N)) do porównywania pozycji na liście. Całkowita złożoność wynosi O (n log n) * O (1), co zmniejsza się do O (n log n) lub jest takie samo jak szybkie sortowanie.var key = primer ? function (x) { return primer(x[field]); } : function (x) { return x[field]; }
[1,-1][+!!reverse]
wygląda świetnie, jest to straszna rzecz. Jeśli użytkownik nie może poprawnie wywołać metody, ukaraj go, nie próbuj w jakiś sposób tego zrozumieć, bez względu na wszystko.Aby go posortować, musisz utworzyć funkcję komparatora, przyjmującą dwa argumenty. Następnie wywołaj funkcję sortowania z tą funkcją komparatora w następujący sposób:
Jeśli chcesz sortować rosnąco, przełącz wyrażenia po obu stronach znaku minus.
źródło
do sortowania napisów na wypadek, gdyby ktoś tego potrzebował,
źródło
Jeśli masz przeglądarkę zgodną z ES6 , możesz użyć:
Różnica między rosnącym a malejącym porządkiem sortowania jest znakiem wartości zwracanej przez funkcję porównywania:
Oto działający fragment kodu:
źródło
Chcesz posortować w JavaScript, prawda? To, czego chcesz, to
sort()
funkcja . W takim przypadku musisz napisać funkcję porównawczą i przekazać jąsort()
, więc coś takiego:Twój komparator pobiera jeden z zagnieżdżonych skrótów wewnątrz tablicy i decyduje, który z nich jest wyższy, zaznaczając pole „cena”.
źródło
Polecam GitHub: Array sortBy - najlepsza implementacja
sortBy
metody wykorzystującej transformację SchwartzianaAle na razie wypróbujemy to podejście Gist: sortBy-old.js .
Stwórzmy metodę sortowania tablic, które mogą układać obiekty według niektórych właściwości.
Tworzenie funkcji sortowania
Ustawianie nieposortowanych danych
Użyj tego
Rozmieszczanie tablicę, przez
"date"
coString
Jeśli chcesz zignorować wielkość liter, ustaw
parser
oddzwonienie:Jeśli chcesz przekonwertować
"date"
pole jakoDate
typ:Tutaj możesz grać z kodem: jsbin.com/lesebi
Dzięki @Ozeshowi przez jego opinię problem związany z właściwościami z wartościami fałszowania został naprawiony.
źródło
var checkNaN = function (value) { return Number.isNaN(Number(value)) ? 0 : value; }
po której następuje: funkcja return (tablica, o) { .... a = _getItem.call (o, a); a = checkNaN (a); b = _getItem.call (o, b); b = checkNaN (b); return o.desc * (a <b? -1: + (a> b)); });Użyj lodash.sortBy , (instrukcje przy użyciu commonjs, możesz także po prostu umieścić skrypt include-tag dla cdn na górze html)
Kolejność malejąca
Rosnąco
źródło
const sortBy = require('lodash/sortBy'); let calendars = sortBy(calendarListResponse.items, cal => cal.summary);
import { orderBy } from 'lodash'; ... ... return orderBy ( rows, 'fieldName' ).reverse();
Można to osiągnąć za pomocą prostej funkcji sortowania valueof () w jednym wierszu . Uruchom fragment kodu poniżej, aby zobaczyć wersję demonstracyjną.
źródło
Trochę się spóźniam na przyjęcie, ale poniżej moja logika sortowania.
źródło
Chociaż wiem, że OP chciał posortować tablicę liczb, pytanie to zostało oznaczone jako odpowiedź na podobne pytania dotyczące ciągów znaków. W związku z tym powyższe odpowiedzi nie uwzględniają sortowania tablicy tekstu, w której ważna jest wielkość liter. Większość odpowiedzi pobiera wartości ciągów i konwertuje je na wielkie / małe litery, a następnie sortuje w taki czy inny sposób. Wymagania, które stosuję, są proste:
Czego oczekuję,
[ A, a, B, b, C, c ]
ale odpowiedzi powyżej zwracająA, B, C, a, b, c
. Właściwie podrapałem się po tym dłużej niż chciałem (dlatego piszę to w nadziei, że pomoże to przynajmniej jednej innej osobie). Podczas gdy dwóch użytkowników wspomina olocaleCompare
funkcji w komentarzach do zaznaczonej odpowiedzi, nie zauważyłem tego, dopóki nie natknąłem się na funkcję podczas wyszukiwania. Po przeczytaniu dokumentacji String.prototype.localeCompare () udało mi się wymyślić:Mówi to funkcji, aby sortowała wartości pisane wielkimi literami przed wartościami pisanymi małymi literami. Drugim parametrem w tej
localeCompare
funkcji jest zdefiniowanie ustawień narodowych, ale jeśli je opuściszundefined
, automatycznie określa ono ustawienia narodowe.Działa to również w przypadku sortowania tablicy obiektów:
źródło
Możesz użyć
sort
metody JavaScript z funkcją wywołania zwrotnego:źródło
Oto kulminacja wszystkich powyższych odpowiedzi.
Sprawdzanie poprawności Fiddle: http://jsfiddle.net/bobberino/4qqk3/
źródło
Pracowałem również z pewnego rodzaju oceną i sortowaniem wielu pól:
Wynik
źródło
Podczas gdy sortowanie pojedynczej tablicy jest nieco przesadne, ta prototypowa funkcja pozwala sortować tablice JavaScript według dowolnego klucza, w kolejności rosnącej lub malejącej, w tym kluczy zagnieżdżonych , przy użyciu
dot
składni.Stosowanie:
Sortowanie według zagnieżdżonych właściwości za pomocą składni kropkowej lub tablicowej:
Sortowanie według wielu kluczy:
Możesz rozwidlić repozytorium: https://github.com/eneko/Array.sortBy
źródło
sortBy
zwięzłą składnię. Prosty w użyciu - nawet z zagnieżdżonymi polami - przy zachowaniu doskonałej czytelności kodu. Dziękuję Ci!Dzięki ECMAScript 6 odpowiedź StoBor może być jeszcze bardziej zwięzła:
źródło
Cena malejąca:
Rosnąco kolejność ceny:
źródło
Aby posortować tablicę, musisz zdefiniować funkcję komparatora. Ta funkcja zawsze różni się w zależności od pożądanego wzorca sortowania lub kolejności (tj. Rosnąco lub malejąco).
Pozwól, że utworzymy niektóre funkcje, które sortują tablicę rosnącą lub malejącą i która zawiera wartości obiektu lub łańcucha lub wartości liczbowe.
Sortuj liczby (alfabetycznie i rosnąco):
Sortuj liczby (alfabetycznie i malejąco):
Sortuj liczby (numerycznie i rosnąco):
Sortuj liczby (numerycznie i malejąco):
Jak wyżej, użyj metody sorterPriceAsc i sorterPriceDes z tablicą z pożądanym kluczem.
źródło
Jeśli używasz Underscore.js , spróbuj sortBy:
źródło
Oto nieco zmodyfikowana wersja eleganckiego wdrożenia z książki „JavaScript: dobre części”.
UWAGA : Ta wersja
by
jest stabilna . Zachowuje kolejność pierwszego sortowania podczas wykonywania następnego sortowania łańcuchowego.Dodałem
isAscending
do niego parametr. Przekształciłem go również wES6
standardy i „nowsze” dobre części zgodnie z zaleceniami autora.Możesz sortować rosnąco, malejąco i łańcuchowo według wielu właściwości.
źródło
{"first":"Curly","last":"Howard", "property" : {"id" : "1"}}
typ tablicy według identyfikatora?by
z name = "property", nestedName = "id"Tylko dla normalnej tablicy wartości elementów:
W przypadku tablicy obiektów:
źródło
Utwórz funkcję i sortuj na podstawie danych wejściowych, używając poniższego kodu
źródło
Możesz użyć string1.localeCompare (string2) do porównania napisów
Zauważ, że
localCompare
to przypadek w czułyźródło
Do sortowania w polu obiektu z wieloma tablicami. Wpisz nazwę pola w
arrprop
tablicy, jak["a","b","c"]
następnie podaj drugi parametrarrsource
rzeczywistego źródła, które chcemy posortować.źródło
Będziesz potrzebował dwóch funkcji
Następnie możesz zastosować to do dowolnej właściwości obiektu:
źródło
Niedawno napisałem uniwersalną funkcję do zarządzania tym, jeśli chcesz z niej skorzystać.
źródło
źródło
Cześć po przeczytaniu tego artykułu, stworzyłem sortComparator dla moich potrzeb, z funkcją porównywania więcej niż jednego atrybutu JSON i chcę się nim z Wami podzielić.
To rozwiązanie porównuje tylko ciągi w porządku rosnącym, ale rozwiązanie można łatwo rozszerzyć dla każdego obsługiwanego atrybutu: odwrotne uporządkowanie, inne typy danych, użycie ustawień regionalnych, rzutowanie itp.
i wynik jest
i inny rodzaj
z wynikiem
źródło
Prosty kod:
źródło
http://yazilimsozluk.com/sort-array-in-javascript-by-asc-or-desc
źródło