JavaScript Array sort ()

JavaScript Array sort () -metoden sorterar objekten i en matris.

Den sort()metod sorterar elementen i en given matris i en viss stigande eller fallande ordning.

Syntaxen för sort()metoden är:

 arr.sort(compareFunction)

Här är arr en matris.

sort () Parametrar

Den sort()metod tar in:

  • jämförFunktion (valfritt) - Den används för att definiera en anpassad sorteringsordning.

Returvärde från sort ()

  • Returnerar matrisen efter att ha sorterat elementen i matrisen på plats (vilket innebär att den ändrar den ursprungliga matrisen och ingen kopia görs).

Exempel 1: Sortera elementen i en matris

När CompareFunction inte passeras,

  • Alla icke- undefinedgruppelement konverteras först till strängar.
  • Dessa strängar jämförs sedan med deras UTF-16 kodpunktvärde.
  • Sorteringen görs i stigande ordning.
  • Alla undefinedelement sorteras till slutet 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)

Produktion

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

Här kan vi se att namnmatrisen sorteras i stigande ordning på strängen. Adam kommer till exempel före Danil eftersom "A" kommer före "D".

Eftersom alla icke-definierade element konverteras till strängar innan de Numbersorteras sorteras datatyperna i den ordningen.

Här kan vi se att även om 1000 numeriskt är större än 50 kommer den i början av den sorterade listan. Det beror på att "1" <"5" .

Exempel 2: Sortering med anpassad funktion

När CompareFunction passeras,

  • Alla icke- undefinedgruppelement sorteras efter returvärdet för jämförFunktion.
  • Alla odefinierade element sorteras till slutet av matrisen och jämförFunktion krävs inte för dem.

Antag att vi vill sortera ovanstående namnmatris så att det längsta namnet kommer sist, snarare än att sortera det alfabetiskt. Vi kan göra det på följande sätt:

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

Här baseras sorteringen på logiken a.length - b.length. Det betyder i grunden att föremålet med kortare längd kommer att visas i början av Array.

Låt oss först förstå hur tillvalet compareFunctionfungerar.

Alla compareFunctionhar följande syntax:

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

Den sort()metod jämför alla värden i uppsättningen genom att passera två värden i taget till den compareFunction. De två parametrarna a och b representerar dessa två värden.

Den compareFunctionska returnera a Number. Detta returnerade värde används för att sortera elementen på följande sätt:

  • Om returnerat värde <0 sorteras a före b (a kommer före b).
  • Om returnerat värde> 0 sorteras b före a (b kommer före a).
  • Om värdet returneras == 0 förblir a och b oförändrade i förhållande till varandra.

I exempel 2 sorterar vi matrisen med:

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

Här:

  • Om a. Längd - b. Längd <0 , kommer a före b. Till exempel kommer "Adam" före "Jeffrey" som 4 - 7 <0 .
  • Om a. Längd - b. Längd> 0 , kommer b före a. Till exempel kommer "Danil" efter "Ben" som 5 - 3> 0.
  • Om a.längd - b.längd == 0 är deras position oförändrad. Till exempel är den relativa positionen för "Jeffrey" och "Fabiano" oförändrad eftersom 7 - 7 == 0 .

Vi kan se att detta resulterar i sortering av strängar efter deras längd i stigande ordning.

Exempel 3: Sortera nummer numeriskt

Eftersom alla icke-odefinierade element konverteras till strängar innan de sorteras kan vi inte sortera siffror med hjälp av deras numeriska värde som standard.

Låt oss se hur vi kan implementera detta med en anpassad 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

 Stigande - 2,7,14,50,1000 Stigande - 1000,50,14,7,2

I det här exemplet sorterade vi matrisen med:

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

Här,

  • Om a - b <0 kommer a före b. Till exempel kommer 2 före 7 som 2 - 7 <0 .
  • Om a - b> 0 kommer b före a. Till exempel kommer 1000 efter 50 som 1000 - 50> 0.

Vi kan se att detta resulterar i att siffrorna sorteras efter deras stigande numeriska värde.

På samma sätt kan vi använda för b - aatt sortera dem i fallande ordning. Observera att vi också kan använda pilfunktionsuttrycket som definierats i ES2015.

Vi kan också vända (fallande ordning) på den sorterade matrisen med den inbyggda matrismetoden reverse(). För att lära dig mer, besök JavaScript Array reverse ().

Intressanta artiklar...