JavaScript Array sort ()

JavaScript Array sort () -metoden sorterer elementerne i en matrix.

Den sort()fremgangsmåde sorteres elementerne i en bestemt opstilling i et specifikt stigende eller faldende rækkefølge.

Metodens syntaks sort()er:

 arr.sort(compareFunction)

Her er arr en matrix.

sorter () parametre

Den sort()metode tager i:

  • CompareFunction (valgfrit) - Det bruges til at definere en brugerdefineret sorteringsrækkefølge.

Returværdi fra sortering ()

  • Returnerer arrayet efter at have sorteret elementerne i arrayet på plads (hvilket betyder at det ændrer det originale array, og der ikke laves nogen kopi).

Eksempel 1: Sortering af elementerne i en matrix

Når CompareFunction ikke er bestået,

  • Alle ikke- undefinedarray-elementer konverteres først til strenge.
  • Disse strenge sammenlignes derefter ved hjælp af deres UTF-16-kodepunktværdi.
  • Sorteringen udføres i stigende rækkefølge.
  • Alle undefinedelementer er sorteret til slutningen af ​​arrayet.
 // 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)

Produktion

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

Her kan vi se, at navne array er sorteret i stigende rækkefølge af strengen. For eksempel kommer Adam foran Danil, fordi "A" kommer før "D".

Da alle ikke-udefinerede elementer konverteres til strenge, før de sorteres, Numbersorteres datatyperne i den rækkefølge.

Her kan vi se, at selvom 1000 er større end 50 numerisk, kommer det i starten af ​​den sorterede liste. Det er fordi "1" <"5" .

Eksempel 2: Sortering ved hjælp af brugerdefineret funktion

Når CompareFunction er bestået,

  • Alle ikke- undefinedmatrixelementer sorteres efter returværdien af ​​CompareFunction.
  • Alle udefinerede elementer sorteres til slutningen af ​​arrayet, og comparFunction kaldes ikke til dem.

Antag, at vi vil sortere ovennævnte navneopstilling, så det længste navn kommer sidst i stedet for at sortere det alfabetisk. Vi kan gøre det på følgende måde:

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

Produktion

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

Her er sorteringen baseret på logikken a.length - b.length. Det betyder grundlæggende, at genstanden med kortere længde vises i begyndelsen af Array.

Lad os først forstå, hvordan det valgfri compareFunctionfungerer.

Enhver compareFunctionhar følgende syntaks:

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

Den sort()metode sammenligner alle værdier af array ved at passere to værdier ad gangen til den compareFunction. De to parametre a og b repræsenterer henholdsvis disse to værdier.

Den compareFunctionskal returnere en Number. Denne returnerede værdi bruges til at sortere elementerne på følgende måde:

  • Hvis returneret værdi <0 , sorteres a før b (a kommer før b).
  • Hvis returneret værdi> 0 , sorteres b før a (b kommer før a).
  • Hvis returneret værdi == 0 , forbliver a og b uændret i forhold til hinanden.

I eksempel 2 sorterer vi arrayet ved hjælp af:

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

Her:

  • Hvis a. Længde - b. Længde <0 , kommer a før b. For eksempel kommer "Adam" foran "Jeffrey" som 4 - 7 <0 .
  • Hvis a. Længde - b. Længde> 0 , kommer b før a. For eksempel kommer "Danil" efter "Ben" som 5 - 3> 0.
  • Hvis a.længde - b.længde == 0 , er deres position uændret. For eksempel er den relative position for "Jeffrey" og "Fabiano" uændret, fordi 7 - 7 == 0 .

Vi kan se, at dette resulterer i sortering af strenge efter deres længde i stigende rækkefølge.

Eksempel 3: Sorter numre numerisk

Da alle ikke-udefinerede elementer konverteres til strenge, før vi sorterer dem, kan vi ikke sortere tal ved hjælp af deres numeriske værdi som standard.

Lad os se, hvordan vi kan implementere dette ved hjælp af en brugerdefineret funktion.

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

Produktion

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

I dette eksempel sorterede vi arrayet ved hjælp af:

 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 efter 50 som 1000 - 50> 0.

Vi kan se, at dette resulterer i sortering af numrene efter deres stigende numeriske værdi.

På samme måde kan vi bruge b - atil at sortere dem i faldende rækkefølge. Bemærk, at vi også kan bruge pilefunktionsudtrykket defineret i ES2015.

Vi kan også vende (faldende rækkefølge) det sorterede array ved hjælp af den indbyggede array- reverse()metode. For at lære mere, besøg JavaScript Array reverse ().

Interessante artikler...