Kako razvrstati niz objekata u JavaScriptu

Isprobajte Naš Instrument Za Uklanjanje Problema

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

JS Bin na jsbin.com

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:

  1. manje od 0 - | _+_ | dolazi prije | _+_ |
  2. veće od 0 - | _+_ | dolazi prije | _+_ |
  3. 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

JS Bin na jsbin.com

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

JS Bin na jsbin.com

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