JavaScripti massiivi sort ()

JavaScripti massiivi sortimine () sorteerib massiivi üksused.

sort()Meetodi sorteerib elemendid antud massiivi konkreetses kasvavas või kahanevas järjekorras.

Meetodi süntaks sort()on:

 arr.sort(compareFunction)

Siin on arr massiiv.

sort () Parameetrid

sort()Meetod võtab:

  • võrdlusfunktsioon (valikuline) - seda kasutatakse kohandatud sortimiskorra määratlemiseks.

Tagastage väärtus sortimisest ()

  • Tagastab massiivi pärast massiivi elementide paigutamist (see tähendab, et see muudab algset massiivi ja koopiat ei tehta).

Näide 1: Massiivi elementide sortimine

Kui võrdlusfunktsiooni ei edastata,

  • Kõik undefinedmittemassiivsed elemendid teisendatakse kõigepealt stringideks.
  • Seejärel võrreldakse neid stringe nende UTF-16 koodipunkti väärtuse abil.
  • Sorteerimine toimub kasvavas järjekorras.
  • Kõik undefinedelemendid on sorteeritud massiivi lõpuni.
 // 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)

Väljund

 ('Adam', 'Ben', 'Danil', 'Fabiano', 'Jeffrey') ('Adam', 'Ben', 'Danil', 'Fabiano', 'Jeffrey') (1000, 14, 2, 50 , 7)

Siin näeme, et nimede massiiv on sorteeritud stringi kasvavas järjekorras. Näiteks tuleb Aadam Danili ette, kuna "A" tuleb enne "D".

Kuna kõik määratlemata elemendid teisendatakse stringideks enne nende sortimist, sorteeritakse Numberandmetüübid selles järjekorras.

Siit näeme, et kuigi 1000 on arvuliselt suurem kui 50 , tuleb see sorteeritud loendi alguses. Selle põhjuseks on "1" <"5" .

Näide 2: sortimine kohandatud funktsiooni abil

Kui võrrelda Funktsioon on läbitud,

  • Kõik undefinedmittemassiivsed elemendid on sorteeritud võrdlusfunktsiooni tagastusväärtuse järgi.
  • Kõik määratlemata elemendid sorteeritakse massiivi lõpuni ja nende jaoks pole võrdlusfunktsiooni kutsutud.

Oletame, et soovime ülaltoodud nimede massiivi sorteerida nii, et pikim nimi oleks viimane, mitte sortida seda tähestiku järgi. Saame seda teha järgmiselt:

 // 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);

Väljund

 ("Ben", "Adam", "Danil", "Jeffrey", "Fabiano")

Siin põhineb sortimine loogikal a.length - b.length. Põhimõtteliselt tähendab see, et lühema pikkusega üksus kuvatakse selle alguses Array.

Mõistame kõigepealt, kuidas valikuline compareFunctiontöötab.

Kõigil compareFunctionon järgmine süntaks:

 function (a, b)( // sorting logic // return a Number )

sort()Meetod võrdleb kõiki massiivi väärtustega sooritades kahe väärtuse korraga kuni compareFunction. Kaks parameetrit a ja b tähistavad vastavalt neid kahte väärtust.

compareFunctionPeaks tagastama Number. Seda tagastatud väärtust kasutatakse elementide sortimiseks järgmisel viisil:

  • Kui tagastatud väärtus on <0 , sorteeritakse a enne b (a tuleb enne b).
  • Kui tagastatav väärtus on> 0 , sorteeritakse b enne a (b tuleb enne a).
  • Kui tagastatud väärtus == 0 , jäävad a ja b üksteise suhtes muutumatuks.

Näites 2 sorteerime massiivi, kasutades:

 function len_compare(a, b)( return a.length - b.length; )

Siin:

  • Kui a.pikkus - b.pikkus <0 , tuleb a enne b. Näiteks "Adam" tuleb enne "Jeffrey" kui 4 - 7 <0 .
  • Kui a. Pikkus - b. Pikkus> 0 , tuleb b enne a. Näiteks tuleb "Danil" pärast "Ben" kui 5 - 3> 0.
  • Kui a.pikkus - b.pikkus == 0 , pole nende asend muutumatu. Näiteks on "Jeffrey" ja "Fabiano" suhteline asend muutumatu, kuna 7 - 7 == 0 .

Näeme, et selle tulemuseks on stringide sortimine nende pikkuse järgi kasvavas järjekorras.

Näide 3: Numbrite sortimine numbriliselt

Kuna kõik määratlemata elemendid teisendatakse stringideks enne nende sortimist, ei saa me numbreid vaikimisi nende arvväärtuse järgi sorteerida.

Vaatame, kuidas saame seda kohandatud funktsiooni abil rakendada.

 // 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);

Väljund

 Kasvav - 2,7,14,50,1000 Laskuv - 1000,50,14,7,2

Selles näites sorteerisime massiivi, kasutades:

 function (a, b) ( return a - b; )

Siin,

  • Kui a - b <0 , tuleb a enne b. Näiteks 2 tuleb enne 7 kui 2 - 7 <0 .
  • Kui a - b> 0 , tuleb b enne a. Näiteks 1000 tuleb pärast 50 kui 1000 - 50> 0.

Näeme, et selle tulemuseks on numbrite sortimine nende kasvava arvväärtuse järgi.

Samamoodi saame neid b - asortida kahanevas järjekorras. Pange tähele, et saame kasutada ka ES2015-s määratletud noolefunktsiooni avaldist.

Samuti võime sisseehitatud massiivi reverse()meetodi abil sorteeritud massiivi ümber pöörata (kahanevas järjekorras) . Lisateabe saamiseks külastage JavaScripti massiivi tagurpidi ().

Huvitavad Artiklid...