JavaScript-matrix sorteren ()

De JavaScript-methode Array sort () sorteert de items van een array.

De sort()methode sorteert de elementen van een bepaalde array in een specifieke oplopende of aflopende volgorde.

De syntaxis van de sort()methode is:

 arr.sort(compareFunction)

Hier is arr een array.

sort () Parameters

De sort()methode omvat:

  • vergelijkFunctie (optioneel) - Het wordt gebruikt om een ​​aangepaste sorteervolgorde te definiëren.

Retourwaarde van sort ()

  • Retourneert de array nadat de elementen van de array op hun plaats zijn gesorteerd (wat betekent dat de oorspronkelijke array wordt gewijzigd en er geen kopie wordt gemaakt).

Voorbeeld 1: de elementen van een array sorteren

Als vergelijkFunctie niet wordt doorgegeven,

  • Alle niet- undefinedarray-elementen worden eerst geconverteerd naar strings.
  • Deze strings worden vervolgens vergeleken met behulp van hun UTF-16 codepuntwaarde.
  • Het sorteren gebeurt in oplopende volgorde.
  • Alle undefinedelementen worden aan het einde van de array gesorteerd.
 // 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)

Uitvoer

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

Hier kunnen we zien dat de array met namen in oplopende volgorde van de string is gesorteerd. Adam komt bijvoorbeeld voor Danil omdat "A" voor "D" komt.

Aangezien alle niet-ongedefinieerde elementen worden geconverteerd naar strings voordat ze Numberworden gesorteerd , worden de gegevenstypen in die volgorde gesorteerd.

Hier kunnen we zien dat, hoewel 1000 numeriek groter is dan 50 , het aan het begin van de gesorteerde lijst staat. Het is omdat "1" <"5" .

Voorbeeld 2: sorteren met persoonlijke functie

Wanneer vergelijkFunctie is doorgegeven,

  • Alle niet- undefinedarray-elementen worden gesorteerd op basis van de geretourneerde waarde van CompareFunction.
  • Alle ongedefinieerde elementen worden naar het einde van de array gesorteerd en voor hen wordt CompareFunction niet aangeroepen.

Stel dat we de bovenstaande array met namen zo willen sorteren dat de langste naam als laatste komt, in plaats van deze alfabetisch te sorteren. We kunnen het op de volgende manier doen:

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

Uitvoer

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

Hier is de sortering gebaseerd op de logica a.length - b.length. Het betekent in feite dat het item met een kortere lengte aan het begin van de Array.

Laten we eerst begrijpen hoe het optionele compareFunctionwerkt.

Elke compareFunctionheeft de volgende syntaxis:

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

De sort()methode vergelijkt alle waarden van de array door twee waarden tegelijk door te geven aan de compareFunction. De twee parameters a en b vertegenwoordigen respectievelijk deze twee waarden.

De compareFunctionmoet een Number. Deze geretourneerde waarde wordt gebruikt om de elementen op de volgende manier te sorteren:

  • Als de geretourneerde waarde <0 is , wordt a gesorteerd voor b (a komt voor b).
  • Als de geretourneerde waarde> 0 is , wordt b gesorteerd voor a (b komt voor a).
  • Als geretourneerde waarde == 0 , blijven a en b ongewijzigd ten opzichte van elkaar.

In Voorbeeld 2 sorteren we de array met behulp van:

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

Hier:

  • Als a.length - b.length <0 , komt a voor b. "Adam" komt bijvoorbeeld voor "Jeffrey" als 4 - 7 <0 .
  • Als a.length - b.length> 0 , komt b voor a. "Danil" komt bijvoorbeeld na "Ben" als 5 - 3> 0.
  • Als a.length - b.length == 0 , is hun positie ongewijzigd. De relatieve positie van "Jeffrey" en "Fabiano" blijft bijvoorbeeld ongewijzigd omdat 7 - 7 == 0 .

We kunnen zien dat dit resulteert in het sorteren van snaren op basis van hun lengte in oplopende volgorde.

Voorbeeld 3: nummers numeriek sorteren

Aangezien alle niet-ongedefinieerde elementen worden geconverteerd naar strings voordat ze worden gesorteerd, kunnen we getallen niet standaard sorteren met hun numerieke waarde.

Laten we eens kijken hoe we dit kunnen implementeren met een aangepaste functie.

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

Uitvoer

 Oplopend - 2,7,14,50,1000 Aflopend - 1000,50,14,7,2

In dit voorbeeld hebben we de array gesorteerd met behulp van:

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

Hier,

  • Als a - b <0 , komt a voor b. 2 komt bijvoorbeeld voor 7 als 2-7 <0 .
  • Als a - b> 0 , komt b voor a. 1000 komt bijvoorbeeld na 50 als 1000 - 50> 0.

We kunnen zien dat dit resulteert in het sorteren van de getallen volgens hun oplopende numerieke waarde.

Evenzo kunnen we ze gebruiken b - aom ze in aflopende volgorde te sorteren. Merk op dat we ook de pijlfunctie-uitdrukking kunnen gebruiken die is gedefinieerd in ES2015.

We kunnen de gesorteerde array ook omkeren (aflopende volgorde) met behulp van de ingebouwde array- reverse()methode. Ga voor meer informatie naar JavaScript Array reverse ().

Interessante artikelen...