JavaScript-taulukon lajittelu ()

JavaScript Array sort () -menetelmä lajittelee matriisin kohteet.

sort()Menetelmä lajittelee elementit tietyn array tietyssä nousevassa tai laskevassa järjestyksessä.

Menetelmän syntaksi sort()on:

 arr.sort(compareFunction)

Tässä arr on taulukko.

lajittelu () -parametrit

sort()Menetelmä vie:

  • CompareFunction (valinnainen) - Sitä käytetään määrittämään mukautettu lajittelujärjestys.

Palautusarvo lajittelusta ()

  • Palauttaa matriisin lajittelemalla matriisin elementit paikoilleen (eli se muuttaa alkuperäistä taulukkoa eikä kopiota tehdä).

Esimerkki 1: Matriisin elementtien lajittelu

Kun vertailutoimintoa ei välitetä,

  • Kaikki ei- undefinedmatriisielementit muunnetaan ensin merkkijonoiksi.
  • Näitä merkkijonoja verrataan sitten niiden UTF-16-koodipistearvolla.
  • Lajittelu tapahtuu nousevassa järjestyksessä.
  • Kaikki undefinedelementit on lajiteltu taulukon loppuun.
 // 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)

Tuotos

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

Täällä voimme nähdä, että nimiryhmä on lajiteltu merkkijonon nousevassa järjestyksessä. Esimerkiksi Adam tulee Danilin eteen, koska "A" tulee ennen "D": tä.

Koska kaikki määrittelemättömät elementit muunnetaan merkkijonoiksi ennen niiden lajittelua, Numbertietotyypit lajitellaan siinä järjestyksessä.

Täällä voimme nähdä, että vaikka 1000 on numeerisesti suurempi kuin 50 , se tulee lajitellun luettelon alkuun. Se johtuu siitä, että "1" <"5" .

Esimerkki 2: Lajittelu mukautetun toiminnon avulla

Kun vertailutoiminto on ohitettu

  • Kaikki ei- undefinedmatriisielementit lajitellaan vertailutoiminnon paluuarvon mukaan.
  • Kaikki määrittelemättömät elementit lajitellaan taulukon loppuun ja vertailutoimintoa ei vaadita heille.

Oletetaan, että haluamme lajitella yllä olevat taulukot siten, että pisin nimi tulee viimeiseksi sen sijaan, että lajitellaan se aakkosjärjestyksessä. Voimme tehdä sen seuraavalla tavalla:

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

Tuotos

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

Tässä lajittelu perustuu logiikkaan a.length - b.length. Se tarkoittaa pohjimmiltaan sitä, että lyhyemmän pituinen kohde ilmestyy alkupuolelle Array.

Ymmärretään ensin, miten valinnainen compareFunctiontoimii.

Jokaisella compareFunctionon seuraava syntakse:

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

sort()Menetelmä vertailee kaikkia taulukon arvot johtamalla kaksi arvoa yhdellä aikaa compareFunction. Kaksi parametria a ja b edustavat vastaavasti näitä kahta arvoa.

compareFunctionTulee palauttaa Number. Tätä palautettua arvoa käytetään elementtien lajitteluun seuraavalla tavalla:

  • Jos palautettu arvo on <0 , a lajitellaan ennen b: tä (a tulee ennen b: tä).
  • Jos palautettu arvo> 0 , b lajitellaan ennen a: ta (b tulee ennen a: ta).
  • Jos palautettu arvo == 0 , a ja b pysyvät muuttumattomina suhteessa toisiinsa.

Esimerkissä 2 lajitellaan taulukko seuraavilla tavoilla:

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

Tässä:

  • Jos a.pituus - b.pituus <0 , a tulee ennen b: tä. Esimerkiksi "Adam" tulee "Jeffreyn" edelle 4 - 7 <0 .
  • Jos a.pituus - b.pituus> 0 , b tulee ennen a: ta. Esimerkiksi "Danil" tulee "Benin" jälkeen arvoksi 5 - 3> 0.
  • Jos a.pituus - b.pituus == 0 , niiden sijainti ei muutu. Esimerkiksi "Jeffrey" ja "Fabiano" suhteellinen sijainti on muuttumaton, koska 7 - 7 == 0 .

Voimme nähdä, että tämä johtaa merkkijonojen lajitteluun niiden pituuden mukaan nousevassa järjestyksessä.

Esimerkki 3: Numeroiden lajittelu numeerisesti

Koska kaikki määrittelemättömät elementit muunnetaan merkkijonoiksi ennen niiden lajittelua, emme voi lajitella numeroita oletusarvoisesti niiden numeerisen arvon perusteella.

Katsotaanpa, kuinka voimme toteuttaa tämän käyttämällä mukautettua toimintoa.

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

Tuotos

 Nouseva - 2,7,14,50,1000 Laskeva - 1000,50,14,7,2

Tässä esimerkissä lajittelimme taulukon seuraavilla tavoilla:

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

Tässä,

  • Jos a - b <0 , a tulee ennen b: tä. Esimerkiksi 2 on ennen 7 kuin 2 - 7 <0 .
  • Jos a - b> 0 , b tulee ennen a: ta. Esimerkiksi 1000 tulee 50: n jälkeen, kun 1000 - 50> 0.

Voimme nähdä, että tämä johtaa numeroiden lajitteluun niiden nousevan numeerisen arvon mukaan.

Vastaavasti voimme käyttää b - aniitä lajittelemaan laskevassa järjestyksessä. Huomaa, että voimme käyttää myös ES2015: ssä määritettyä nuolitoiminnon lauseketta.

Voimme myös kääntää (laskevassa järjestyksessä) lajitellun taulukon käyttämällä sisäänrakennettua taulukkoa reverse(). Saat lisätietoja käymällä JavaScript Array reverse () -sivulla.

Mielenkiintoisia artikkeleita...