JavaScript Array sort () metode kārto masīva vienumus.
sort()
Metode sakārto elementus konkrētā masīva atrodas konkrētā augošā vai dilstošā secībā.
Metodes sintakse sort()
ir šāda:
arr.sort(compareFunction)
Lūk, arr ir masīvs.
sort () Parametri
sort()
Metode ņem in:
- salīdzinātFunkcija (pēc izvēles) - to izmanto, lai definētu pielāgotu kārtošanas kārtību.
Atgriezt vērtību no kārtošanas ()
- Atgriež masīvu pēc masīva elementu sakārtošanas vietā (tas nozīmē, ka tas maina sākotnējo masīvu un netiek kopēts).
1. piemērs: Masīva elementu kārtošana
Ja salīdzinātFunkcija nav nodota,
- Visi
undefined
elementi, kas nav masīva, vispirms tiek pārveidoti par virknēm. - Pēc tam šīs virknes tiek salīdzinātas, izmantojot to UTF-16 koda punkta vērtību.
- Šķirošana tiek veikta augošā secībā.
- Visi
undefined
elementi tiek sakārtoti līdz masīva beigām.
// sorting an array of strings var names = ("Adam", "Jeffrey", "Fabiano", "Danil", "Ben"); // returns the sorted array console.log(names.sort()); // modifies the array in place console.log(names); var priceList = (1000, 50, 2, 7, 14); priceList.sort(); // Number is converted to string and sorted console.log(priceList)
Rezultāts
('Adam', 'Ben', 'Danil', 'Fabiano', 'Jeffrey') ('Adam', 'Ben', 'Danil', 'Fabiano', 'Jeffrey') (1000, 14, 2, 50) , 7)
Šeit mēs varam redzēt, ka nosaukumu masīvs ir sakārtots virknes augošā secībā. Piemēram, Ādams nāk Danila priekšā, jo “A” ir pirms “D”.
Tā kā visi nenoteiktie elementi pirms to šķirošanas tiek pārveidoti par virknēm, Number
datu tipi tiek sakārtoti šajā secībā.
Šeit mēs varam redzēt, ka, lai arī skaitliski 1000 ir lielāks par 50 , tas ir sakārtotā saraksta sākumā. Tas ir tāpēc, ka "1" <"5" .
2. piemērs: kārtošana, izmantojot pielāgoto funkciju
Kad salīdzināšanas funkcija ir nodota,
- Visi
undefined
elementi, kas nav masīvi, tiek sakārtoti pēc salīdzināmās funkcijas atgriešanās vērtības. - Visi nenoteiktie elementi tiek sakārtoti līdz masīva beigām, un tiem nav izsaukta salīdzināšanas funkcija.
Pieņemsim, ka mēs gribam sakārtot iepriekšminēto nosaukumu masīvu tā, lai garākais nosaukums būtu pēdējais, nevis kārtotu alfabētiskā secībā. Mēs to varam izdarīt šādi:
// custom sorting an array of strings var names = ("Adam", "Jeffrey", "Fabiano", "Danil", "Ben"); function len_compare(a, b)( return a.length - b.length; ) // sort according to string length names.sort(len_compare); console.log(names);
Rezultāts
('Bens', 'Ādams', 'Danils', 'Džefrijs', 'Fabiano')
Šeit šķirošana ir balstīta uz loģiku a.length - b.length
. Tas būtībā nozīmē, ka vienums ar mazāku garumu parādīsies Array
.
Vispirms sapratīsim, kā darbojas izvēles opcija compareFunction
.
Jebkuram compareFunction
ir šāda sintakse:
function (a, b)( // sorting logic // return a Number )
sort()
Metode salīdzina visu vērtības masīva, izejot divas vērtības vienlaicīgi uz compareFunction
. Abi parametri a un b attiecīgi apzīmē šīs divas vērtības.
compareFunction
Būtu jārāda Number
. Šī atgrieztā vērtība tiek izmantota, lai kārtotu elementus šādā veidā:
- Ja atgrieztā vērtība ir <0 , a tiek sakārtota pirms b (a nāk pirms b).
- Ja atgrieztā vērtība> 0 , b tiek sakārtots pirms a (b nāk pirms a).
- Ja atgrieztā vērtība == 0 , a un b nemainās attiecībā pret otru.
2. piemērā mēs kārtojam masīvu, izmantojot:
function len_compare(a, b)( return a.length - b.length; )
Šeit:
- Ja a.length - b.length <0 , a nāk pirms b. Piemēram, "Adam" ir priekšā "Jeffrey" kā 4 - 7 <0 .
- Ja a.length - b.length> 0 , b nāk pirms a. Piemēram, "Danil" nāk pēc "Ben" kā 5 - 3> 0.
- Ja a.length - b.length == 0 , to pozīcija nemainās. Piemēram, "Džefrija" un "Fabiano" relatīvā pozīcija nemainās, jo 7 - 7 == 0 .
Mēs varam redzēt, ka tā rezultātā virknes tiek sakārtotas pēc to garuma augošā secībā.
3. piemērs: skaitļu kārtošana skaitliski
Tā kā visi nenoteiktie elementi pirms to kārtošanas tiek pārveidoti par virknēm, pēc noklusējuma numurus nevar kārtot, izmantojot to skaitlisko vērtību.
Apskatīsim, kā mēs to varam ieviest, izmantojot pielāgotu funkciju.
// numeric sorting // define array var priceList = (1000, 50, 2, 7, 14); // sort() using function expression // ascending order priceList.sort(function (a, b) ( return a - b; )); // Output: Ascending - 2,7,14,50,1000 console.log("Ascending - " + priceList); // sort() using arrow function expression // descending order priceList.sort((a, b) => b - a); // Output: Descending - 1000,50,14,7,2 console.log("Descending - " + priceList);
Rezultāts
Augošā secībā - 2,7,14,50,1000 Dilstošā secībā - 1000,50,14,7,2
Šajā piemērā mēs sakārtojām masīvu, izmantojot:
function (a, b) ( return a - b; )
Šeit,
- Ja a - b <0 , a nāk pirms b. Piemēram, 2 ir pirms 7, jo 2 - 7 <0 .
- Ja a - b> 0 , b nāk pirms a. Piemēram, 1000 nāk pēc 50, jo 1000 - 50> 0.
Mēs varam redzēt, ka tā rezultātā numuri tiek kārtoti pēc to skaitliskā pieauguma.
Līdzīgi mēs varam b - a
tos kārtot dilstošā secībā. Ņemiet vērā, ka mēs varam izmantot arī bultiņas funkcijas izteiksmi, kas definēta ES2015.
Mēs varam arī mainīt (dilstošā secībā) sakārtoto masīvu, izmantojot iebūvēto masīvu reverse()
metodi. Lai uzzinātu vairāk, apmeklējiet JavaScript masīva reverso ().