JavaScript Array sort ()

JavaScript Array sort () -metoden sorterer elementene i en matrise.

Den sort()metode sorteres elementene av en gitt oppstilling i en bestemt stigende eller synkende rekkefølge.

Syntaksen til sort()metoden er:

 arr.sort(compareFunction)

Her er arr en matrise.

sorter () parametere

Den sort()metoden tar i:

  • CompareFunction (valgfritt) - Den brukes til å definere en tilpasset sorteringsrekkefølge.

Returverdi fra sortering ()

  • Returnerer matrisen etter å ha sortert elementene i matrisen på plass (noe som betyr at den endrer den originale matrisen og ingen kopi blir laget).

Eksempel 1: Sortere elementene i en matrise

Når CompareFunction ikke er bestått,

  • Alle ikke- undefinedarray-elementer konverteres først til strenger.
  • Disse strengene blir deretter sammenlignet ved hjelp av UTF-16-kodepunktverdien.
  • Sorteringen gjøres i stigende rekkefølge.
  • Alle undefinedelementene er sortert til slutten av matrisen.
 // 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)

Produksjon

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

Her kan vi se at navnefeltet er sortert i stigende rekkefølge av strengen. For eksempel kommer Adam foran Danil fordi "A" kommer før "D".

Siden alle ikke-udefinerte elementer blir konvertert til strenger før de sorteres, Numbersorteres datatypene i den rekkefølgen.

Her kan vi se at selv om 1000 er større enn 50 numerisk, kommer den i begynnelsen av den sorterte listen. Det er fordi "1" <"5" .

Eksempel 2: Sortering ved bruk av egendefinert funksjon

Når CompareFunction er bestått,

  • Alle undefinedelementene som ikke er matriser sorteres etter returverdien til CompareFunction.
  • Alle udefinerte elementer er sortert til slutten av matrisen, og comparFunction er ikke kalt for dem.

Anta at vi vil sortere navnene ovenfor, slik at det lengste navnet kommer sist, i stedet for å sortere det alfabetisk. Vi kan gjøre det på følgende måte:

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

Produksjon

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

Her er sorteringen basert på logikken a.length - b.length. Det betyr i utgangspunktet at varen med kortere lengde vil vises i begynnelsen av Array.

La oss først forstå hvordan det valgfrie compareFunctionfungerer.

Enhver compareFunctionhar følgende syntaks:

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

Den sort()metode sammenligner alle verdier i matrisen ved å føre to verdier ved en tid til den compareFunction. De to parametrene a og b representerer henholdsvis disse to verdiene.

Den compareFunctionskal returnere a Number. Denne returnerte verdien brukes til å sortere elementene på følgende måte:

  • Hvis returnert verdi <0 , blir a sortert før b (a kommer før b).
  • Hvis returnert verdi> 0 , sorteres b før a (b kommer før a).
  • Hvis returnert verdi == 0 , forblir a og b uendret i forhold til hverandre.

I eksempel 2 sorterer vi matrisen ved hjelp av:

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

Her:

  • Hvis a. Lengde - b. Lengde <0 , kommer a før b. For eksempel kommer "Adam" foran "Jeffrey" som 4 - 7 <0 .
  • Hvis a. Lengde - b. Lengde> 0 , kommer b før a. For eksempel kommer "Danil" etter "Ben" som 5 - 3> 0.
  • Hvis a.lengde - b.lengde == 0 , er deres posisjon uendret. For eksempel er den relative posisjonen til "Jeffrey" og "Fabiano" uendret fordi 7 - 7 == 0 .

Vi kan se at dette resulterer i sortering av strenger etter lengden i stigende rekkefølge.

Eksempel 3: Sortering av tall numerisk

Siden alle ikke-definerte elementer konverteres til strenger før vi sorterer dem, kan vi ikke sortere tall ved hjelp av deres numeriske verdi som standard.

La oss se hvordan vi kan implementere dette ved hjelp av en tilpasset funksjon.

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

Produksjon

 Stigende - 2,7,14,50,1000 Stigende - 1000,50,14,7,2

I dette eksemplet sorterte vi matrisen ved hjelp av:

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

Her,

  • Hvis a - b <0 , kommer a før b. For eksempel kommer 2 før 7 som 2 - 7 <0 .
  • Hvis a - b> 0 , kommer b før a. For eksempel kommer 1000 etter 50 som 1000 - 50> 0.

Vi kan se at dette resulterer i sortering av tallene i henhold til deres stigende numeriske verdi.

På samme måte kan vi bruke b - atil å sortere dem i synkende rekkefølge. Merk at vi også kan bruke pilfunksjonsuttrykket definert i ES2015.

Vi kan også reversere (fallende rekkefølge) den sorterte matrisen ved hjelp av den innebygde matrismetoden reverse(). Hvis du vil vite mer, kan du gå til JavaScript Array reverse ().

Interessante artikler...