Array Sparsi in Javascript

Concetti Chiave
  • Gli array sparsi in Javascript sono array che non hanno indici contigui e possono avere elementi con indici molto distanti tra loro.
  • La proprietà length di un array sparso è maggiore del numero di elementi effettivamente presenti nell'array.
  • Gli array sparsi possono essere creati utilizzando il costruttore Array() o assegnando un valore a un indice maggiore dell'attuale length dell'array.
  • Gli array sparsi sono implementati in modo diverso rispetto agli array densi, e la ricerca di elementi in un array sparso richiede lo stesso tempo della ricerca di proprietà di oggetti regolari.
  • Gli array sparsi possono essere creati anche omettendo valori in un array letterale, come in [1,,3], dove gli elementi omessi semplicemente non esistono.

Array Sparsi

Un array sparso è un particolare array in cui gli elementi non hanno indici contigui che iniziano da 0.

Normalmente, la proprietà length di un array specifica il numero di elementi nell'array. Se l'array è sparso, il valore della proprietà length è maggiore del numero di elementi. Gli array sparsi possono essere creati con il costruttore Array() o semplicemente assegnando a un indice dell'array più grande dell'attuale length dell'array.

// Nessun elemento, ma a.length è 5.
let a = new Array(5);

// Crea un array senza elementi e length = 0.
a = [];

// L'assegnazione aggiunge un elemento ma imposta length a 1001.
a[1000] = 0;

Vedremo più avanti che è possibile rendere un array sparso anche con l'operatore delete.

Gli array che sono sufficientemente sparsi sono tipicamente implementati in un modo più lento in termini di tempo di accesso ma più efficiente in termini di memoria rispetto agli array densi, e la ricerca di elementi in tale array richiederà circa lo stesso tempo della ricerca di proprietà di oggetti regolari.

Si noti che quando si omette un valore in un array letterale (usando virgole ripetute come in [1,,3]), l'array risultante è sparso, e gli elementi omessi semplicemente non esistono:

// Questo array non ha elementi e length 1
let a1 = [,];

// Questo array ha un elemento undefined
let a2 = [undefined];

// false: a1 non ha elementi con indice 0
0 in a1

// true: a2 ha il valore undefined all'indice 0
0 in a2

Comprendere gli array sparsi è una parte importante del comprendere la vera natura degli array JavaScript. In pratica, tuttavia, la maggior parte degli array JavaScript con cui tipicamente si lavora non sono sparsi.