Een array van objecten sorteren in JavaScript

Array van objecten sorteren in JavaScript (comparator-builder) | We.Inc

Bouw een comparator met klikken: sorteer objecten op een getal, tekst, datum of twee keys, met localeCompare-opties, en zie resultaat en code naast elkaar.

Een array van objecten sorteren in JavaScript

Geef sort een compare-functie die kijkt naar de property waar het om gaat. Voor getallen retourneert u a.price - b.price. Voor tekst retourneert u a.name.localeCompare(b.name). Voor datums trekt u de timestamps van elkaar af. Een negatief resultaat zet a eerst, een positief zet b eerst. Gebruik toSorted in plaats van sort als de oorspronkelijke volgorde bewaard moet blijven.

Comparator voor elk soort key

Objecten sorteren gaat om drie redenen vaak mis: de standaard sort vergelijkt alles als tekst, hoofdletters komen bij een gewone kleiner-dan-vergelijking vóór kleine letters, en sort herschrijft de array die u meegeeft. Met de builder hieronder zet u elk van die schakelaars om op een kleine teamlijst en ziet u de volgorde veranderen, met de bijbehorende comparator klaar om te kopiëren.

Veelgestelde vragen

Hoe sorteer ik een array van objecten op een property?

Roep people.sort((a, b) => a.age - b.age) aan voor een numerieke property of people.sort((a, b) => a.name.localeCompare(b.name)) voor een string. Wissel a en b om om de richting om te draaien.

Hoe sorteer ik op twee velden?

Vergelijk het eerste veld en ga alleen door naar het tweede als het eerste gelijk is: (a, b) => a.team.localeCompare(b.team) || a.age - b.age. De || werkt omdat gelijkspel 0 retourneert, wat als false telt.

Is sort in JavaScript stabiel?

Ja. Sinds ECMAScript 2019 moet sort stabiel zijn, dus items die als gelijk worden vergeleken houden hun eerdere volgorde. Daarom geeft eerst op naam en daarna op team sorteren een lijst gegroepeerd per team, met de namen op volgorde binnen elke groep.

Verandert sort de oorspronkelijke array?

Ja. sort herschikt de array ter plekke en retourneert diezelfde array. toSorted neemt dezelfde compare-functie maar retourneert een nieuwe array en laat de oorspronkelijke volgorde ongemoeid. Het is sinds juli 2023 beschikbaar in alle grote browsers.

Waarom worden namen met een kleine letter na namen met een hoofdletter gesorteerd?

Een gewone < of > vergelijkt tekencodes, en elke hoofdletter heeft een lagere code dan elke kleine letter. localeCompare volgt in plaats daarvan het alfabet van de taal, en met { sensitivity: 'base' } behandelt het ook accenten en hoofdletters als gelijk.

Wat de compare-functie echt retourneert

Datums, ontbrekende waarden en gemengde types

Waarom een gewone sort() getallen verkeerd sorteert

Zonder compare-functie wordt elk element omgezet naar een string en vergeleken op UTF-16-code-units, dus het eerste teken wint.

Standaardvolgorde tegenover een numerieke comparator

De standaard zet 100 vóór 25 omdat de tekst '1' vóór '2' komt.

Sorteren op meerdere keys, taalbewust en zonder mutatie

Team van A tot Z, daarna oudste eerst, zonder het origineel aan te raken

De ||-keten gaat alleen naar de volgende key als de vorige vergelijking 0 is. toSorted retourneert een nieuwe array.

Eén Intl.Collator voor een lange lijst

numeric: true zet T-2 vóór T-10, en sensitivity: 'base' negeert hoofdletters en accenten.

Een herbruikbare sortBy-helper

Geef de namen van de keys op volgorde mee. Een minteken voor een key sorteert die key aflopend.

Comparator-builder

Kies hoe de voorbeeldlijst van het team gesorteerd wordt, en tabel en code werken samen bij.

Sorteren op

Daarna op (bij gelijkspel)

Niets

Richting

Oplopend

Aflopend

Tekstvergelijking

Gewone < en >

localeCompare

localeCompare, numeriek en hoofdletterongevoelig

Voorbeeldlijst voor de comparator-builder (oorspronkelijke volgorde)

Resultaat van de comparator

Comparator

Code kopiëren

Gratis beginnen · Geen creditcard nodig

Gerelateerd: Gidsen

Product

Voor wie

Functies

Bronnen

Bedrijf

Sitemap