Ordinare un array di oggetti in JavaScript

Ordinare un array di oggetti in JavaScript (generatore di comparatori) | We.Inc

Crea un comparatore con pochi clic: ordina oggetti per numero, stringa, data o due chiavi, con le opzioni di localeCompare, e vedi il risultato e il codice fianco a fianco.

Ordinare un array di oggetti in JavaScript

Passa a sort una funzione di confronto che guardi la proprietà che ti interessa. Per i numeri, restituisci a.price - b.price. Per il testo, restituisci a.name.localeCompare(b.name). Per le date, sottrai i timestamp. Un risultato negativo mette prima a, uno positivo mette prima b. Usa toSorted invece di sort quando l'ordine originale deve restare intatto.

Comparatore per ogni tipo di chiave

Ordinare oggetti mette in difficoltà per tre motivi: il sort predefinito confronta tutto come testo, con un semplice confronto minore di le maiuscole finiscono prima delle minuscole, e sort riscrive l'array che gli passi. Il generatore qui sotto ti permette di attivare ciascuno di questi interruttori su una piccola lista di un team e vedere l'ordine cambiare, con il comparatore corrispondente pronto da copiare.

Domande frequenti

Come ordino un array di oggetti per una proprietà?

Chiama people.sort((a, b) => a.age - b.age) per una proprietà numerica oppure people.sort((a, b) => a.name.localeCompare(b.name)) per una stringa. Scambia a e b per invertire la direzione.

Come ordino per due campi?

Confronta il primo campo e passa al secondo solo quando il primo è in pareggio: (a, b) => a.team.localeCompare(b.team) || a.age - b.age. Il || funziona perché un pareggio restituisce 0, che vale come false.

Il sort di JavaScript è stabile?

Sì. Da ECMAScript 2019 sort deve essere stabile, quindi gli elementi considerati uguali mantengono il loro ordine precedente. Per questo ordinare prima per nome e poi per team dà una lista raggruppata per team con i nomi in ordine all'interno di ogni gruppo.

sort modifica l'array originale?

Sì. sort riordina l'array sul posto e restituisce quello stesso array. toSorted accetta la stessa funzione di confronto ma restituisce un nuovo array e lascia invariato l'ordine originale. È disponibile in tutti i principali browser da luglio 2023.

Perché i nomi in minuscolo vengono ordinati dopo quelli in maiuscolo?

Un semplice confronto con < o > confronta i codici dei caratteri, e ogni lettera maiuscola ha un codice più basso di ogni lettera minuscola. localeCompare segue invece l'alfabeto della lingua, e con { sensitivity: 'base' } tratta anche accenti e maiuscole come equivalenti.

Cosa restituisce davvero la funzione di confronto

Date, valori mancanti e tipi misti

Perché il semplice sort() sbaglia con i numeri

Senza funzione di confronto ogni elemento viene convertito in stringa e confrontato per unità di codice UTF-16, quindi vince il primo carattere.

Ordine predefinito a confronto con un comparatore numerico

Il predefinito mette 100 prima di 25 perché il testo '1' viene prima di '2'.

Ordinamenti multi-chiave, sensibili alla lingua e non distruttivi

Team dalla A alla Z, poi dal più anziano, senza toccare l'originale

La catena di || passa alla chiave successiva solo quando il confronto precedente vale 0. toSorted restituisce un nuovo array.

Un unico Intl.Collator per una lista lunga

numeric: true mette T-2 prima di T-10, e sensitivity: 'base' ignora maiuscole e accenti.

Un helper sortBy riutilizzabile

Passa i nomi delle chiavi in ordine. Un segno meno davanti a una chiave la ordina in modo decrescente.

Generatore di comparatori

Scegli come ordinare la lista di esempio del team: tabella e codice si aggiornano insieme.

Ordina per

Poi per (in caso di pareggio)

Niente

Direzione

Crescente

Decrescente

Confronto del testo

Semplice < e >

localeCompare

localeCompare, numerico e senza distinzione tra maiuscole e minuscole

Lista di esempio usata dal generatore di comparatori (ordine originale)

Risultato del comparatore

Comparatore

Copia codice

Inizia gratis · Nessuna carta di credito richiesta

Correlati: Guide

Prodotto

Per chi è

Funzionalità

Risorse

Azienda

Mappa del sito