Kako razvrstati niz objekata u JavaScriptu
U ovom članku ću vam pokazati kako poredati niz objekata u JavaScriptu bez muke i muke.
Ako imate niz objekata koje morate sortirati u određeni redoslijed, napast bi mogla biti posezanje za JavaScript knjižnicom. Prije nego što to učinite, zapamtite da možete napraviti prilično uredno sortiranje s izvornom funkcijom Array.sort.
Za nastavak ovog članka trebat će vam poznavanje osnovnih JavaScript koncepata, poput deklariranja varijabli, funkcija pisanja i uvjetnih izraza. Također ću koristiti sintaksu ES6.
Osnovno sortiranje nizova
Prema zadanim postavkama, JavaScript | _+_ | funkcija pretvara svaki element u nizu za sortiranje u niz i uspoređuje ih u Unicode kodna točka narudžba.
Array.sort
Možda se pitate zašto 30 dolazi prije 4. Nije logično, ha? Pa, zapravo i jest. To se događa jer se svaki element u nizu prvo pretvara u niz, a | _+_ | dolazi prije | _+_ | po Unicode redoslijedu.
Također je vrijedno napomenuti da za razliku od mnogih drugih funkcija JavaScript polja, | _+_ | zapravo mijenja ili mutira niz koji sortira.
const foo = [8, 3, 5, 'whistle', 'fish']; foo.sort(); // returns [3, 5, 8, 'fish', 'whistle'] const bar = [4, 19, 30, function(){}, {key: 'value'}]; bar.sort(); // returns [ 19, 30, 4, { key: 'value' }, [Function] ]
Da biste to izbjegli, možete stvoriti novu instancu niza za sortiranje i umjesto toga to izmijeniti.
'30'
Obratite pozornost na upotrebu | _+_ | operator za kreiranje nove instance | _+_ |. Možete pročitati više o tome ovdje .
privatna metoda python klase
Isprobaj
Pomoću | _+_ | samo po sebi ne bi bilo od velike koristi za razvrstavanje niza objekata. Srećom, funkcija uzima opcijski | _+_ | parametar, što uzrokuje sortiranje elemenata niza prema povratnoj vrijednosti funkcije usporedbe.
Upotreba funkcija Usporedi za sortiranje
Recimo da je | _+_ | i | _+_ | su dva elementa koja se uspoređuju pomoću funkcije usporedbe. Ako je povratna vrijednost funkcije usporedbe:
- manje od 0 - | _+_ | dolazi prije | _+_ |
- veće od 0 - | _+_ | dolazi prije | _+_ |
- jednako 0 - | _+_ | i | _+_ | ostaju nepromijenjeni jedno prema drugom
Pogledajmo jednostavan primjer s nizom brojeva:
'4'
To se može donekle preinačiti kako bi se dobila povratna vrijednost oduzimanjem | _+_ | od | _+_ |:
Array.sort
Ovo je sada dobar kandidat za funkciju strelice:
const baz = ['hello world', 31, 5, 9, 12]; baz.sort(); // baz array is modified console.log(baz); // shows [12, 31, 5, 9, 'hello world']
Ako niste upoznati sa funkcijama strelica, možete pročitati više o njima ovdje: Funkcije strelice ES6: Debela i sažeta sintaksa u JavaScriptu .
reagirati izvorna traka kartica
Poredajte niz objekata u JavaScriptu
Pogledajmo sada sortiranje niza objekata. Uzmimo niz objekata bendova:
const baz = ['hello world', 31, 5, 9, 12]; const newBaz = [...baz].sort(); // new instance of baz array is created and sorted console.log(baz); // 'hello world', 31, 5, 9, 12] console.log(newBaz); // [12, 31, 5, 9, 'hello world']
Možemo koristiti sljedeće | _+_ | funkcija za sortiranje ovog niza objekata prema žanru:
spread
Da biste obrnuli redoslijed sortiranja, jednostavno možete obrnuti povratnu vrijednost | _+_ | funkcija:
python ispisuje brojeve od 1 do 10
baz
Isprobaj
Stvaranje funkcije dinamičkog sortiranja
Završimo tako da ovo učinimo dinamičnijim. Izradimo funkciju razvrstavanja koju možete koristiti za sortiranje niza objekata čije su vrijednosti nizovi ili brojevi. Ova funkcija ima dva parametra - ključ po kojem želimo sortirati i redoslijed rezultata (tj. Uzlazno ili silazno).
Array.sort
A ovako biste ga koristili:
compareFunction
Isprobaj
U gornjem kodu, hasOwnProperty metoda koristi se za provjeru je li navedeno svojstvo definirano na svakom objektu i nije naslijeđena putem lanca prototipa . Ako nije definirano na objektima, funkcija vraća | _+_ |, što uzrokuje da redoslijed sortiranja ostane takav kakav jest (tj. Objekti ostaju nepromijenjeni jedan u odnosu na drugi).
The operator tipa typeof također se koristi za provjeru tipa podataka vrijednosti nekretnine. To omogućuje funkciji da odredi pravilan način sortiranja niza. Na primjer, ako je vrijednost navedenog svojstva a | _+_ |, a | _+_ | metoda koristi se za pretvaranje svih znakova u velika slova, pa se velika slova zanemaruju prilikom sortiranja.
Gornju funkciju možete prilagoditi tako da se prilagodi drugim vrstama podataka i svim drugim osobitostima koje vaša skripta treba.
Grangerov test uzročnosti python
String.prototype.localeCompare ()
U gornjem primjeru želimo biti u mogućnosti sortirati niz objekata čije su vrijednosti ili nizovi ili brojevi. Međutim, ako znate da ćete se baviti samo objektima čije su vrijednosti nizovi, možete malo urediti kôd koristeći JavaScript | _+_ | metoda.
Ova metoda vraća broj koji označava dolazi li niz prije, poslije ili je isti kao zadani niz u redoslijedu sortiranja. Omogućuje vrstu niza koja ne razlikuje velika i mala slova:
a
U smislu našeg | _+_ | funkciju, to znači da bismo mogli napisati:
b
Možete pročitati više o localeUporedi na MDN -u .
Zaključak
Dakle, evo ga - kratki uvod u sortiranje niza objekata. Iako mnoge JavaScript knjižnice nude ovu vrstu dinamičkog sortiranja (npr. Underscore.js , Lodash i Šećer ), kao što je pokazano, nije toliko teško sami implementirati ovu vrstu funkcionalnosti.
Ako imate pitanja ili komentara, slobodno započnite razgovor.
Izvorno objavila Olayinka Omole na sitepoint.com
#javascript