Di cosa parlo quando parlo di ordinamento: districare Array#sort

La classificazione delle cose è una parte fondamentale della nostra vita quotidiana: è qualcosa che facciamo ogni giorno per rendere più facile la nostra vita, seguendo ogni tipo di criterio. Che stiate cercando il numero di telefono di una persona, la posizione del vostro libro preferito, o addirittura di abbinare i vostri calzini , l’ordinamento ci permette di trovare quello che cerchiamo in un modo più veloce ed efficace.

L’articolo prosegue sotto

Lo stesso succede nel mondo dello sviluppo web. Ma se pensate di sapere esattamente come funziona Array#sort di JavaScript sotto il cofano, pensaci due volte.

Esaminare superficialmente#section1

Indipendentemente dal vostro livello di abilità, se siete JavaScript developer, ad un certo punto avrete probabilmente incontrato il metodo Array#sort. Vi ricordate la prima volta che avete provato a riordinare i numeri in JavaScript? Probabilmente sarete rimasti sorpresi dallo scoprire (proprio come tutti noi) che il metodo sort NON riordina le cose esattamente come ci aspetteremmo. Non sapete di cosa sto parlando? Tuffiamoci in un po’ codice:

const myArray = [33, 2, 98, 25, 4]
myArray.sort() // [ 2, 25, 33, 4, 98 ]

Aspetta, cosa?? JavaScript è impazzito? In che mondo 25 e 33 sono più piccoli di 4? Prima di cominciare a ripensare a tutta la nostra vita, vediamo di capirci qualcosa.

Ordinamento lessicografico#section2

Ciò che sta realmente accadendo è che JavaScript sta riordinano il nostro array numerico in maniera lessicografica: pensate all’ordine alfabetico, dove ogni valore viene trattato come una stringa.

L’inghippo qui è che Array#sort può ricevere una funzione di confronto come parametro, ma se non gliela si dà, “gli elementi vengono riordinati convertendoli in stringhe e confrontando le stringhe nell’ordine dell’Unicode code point” (secondo gli MDN docs). Questo significa che JavaScript tratterà il seguente array in maniera simile quando chiamerà il metodo sort:

const numbers = [80, 9]
numbers.sort() // [80, 9]

const strings = ['80', '9']
strings.sort() // ['80', '9']

In questo caso, “80” viene prima di “9” perché ha uno Unicode code point più piccolo. Se non mi credete, date un’occhiata al valore del code point del primo carattere di ciascuno di questi:

"8".codePointAt(0)  // 56
"9".codePointAt(0)  // 57

Praticamente, la funzione codePointAt() è semplicemente un metodo dell’oggetto String che viene usato per ottenere il valore dello Unicode code point di ciascun carattere a un dato indice.

A questo punto, il seguente codice non dovrebbe stupire nessuno perché adesso sappiamo che JavaScript sta semplicemente convertendo in stringhe tutti gli elementi in quegli array e sta confrontando i loro valori Unicode. (Sì, anche le Emojis hanno dei valori di Unicode code point).

const emojis = ["

Sull’autore

Claudia Hernández

Claudia Hernández è una software engineer attualmente residente in undefined. Le sue attività quotidiane includono la creazione di esperienze utente bellissime attraverso il codice. Quando non scrive codice o diffonde il verbo dei signori di JavaScript, probabilmente è in ritardo per un volo e ne sta facendo il live tweeting.

Nessun commento

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Altro da ALA

Webwaste

In questo estratto da World Wide Waste, Gerry McGovern esamina l'impatto ambientale di siti web pieni zeppi di asset inutili. Digital is physical. Sembra economico e gratis ma non lo è: ci costa la Terra.
Industry