In JavaScript, un array è una struttura simile a una lista, senza lunghezza fissa, che può contenere qualsiasi tipo di primitivo o oggetto, anche di tipi misti.
Include la proprietà length e anche tanti metodi utili per attraversare e modificare l'array.
Per creare un array, aggiungi gli elementi tra parentesi quadre [].
Per leggere da un array, metti l'indice tra parentesi quadre [] dopo l'identificatore. Gli indici di un array partono da zero.
Per esempio:
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names[1];
// => Laura
Gli array si possono creare anche usando la sintassi del costruttore, ma nella maggior parte dei casi è consigliata la sintassi letterale.
const names = new Array();
names.push('Jack', 'Laura', 'Paul', 'Megan');
names[1];
// => Laura
Gli array non possono usare delle strings come indici degli elementi, ma devono usare numeri interi (number).
Impostare o accedere tramite valori non interi, usando la notazione con parentesi quadre (o la notazione con il punto), non imposta né recupera un elemento dalla lista dell'array vera e propria, ma imposta o accede a una variabile associata all'insieme di proprietà dell'oggetto di quell'array.
Le proprietà dell'oggetto array e la lista degli elementi dell'array sono separate, e le operazioni di attraversamento e modifica dell'array non possono essere applicate a queste proprietà con nome.
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.length;
// => 4
// Properties can be set on arrays using bracket ['property'] or
// dot .property notation, and this will affect the length, as
// shown below.
names.magician = 'Elyse';
names.length;
// => 4
// The property shows up when logging the array, making it seem
// that the property is somehow incorporated in the array.
names;
// => ["Jack", "Laura", "Paul", "Megan", magician: "Elyse"]
// However, be aware. Properties added via non-numeric keys are
// NOT part of the array's internal list, and are not traversed
// or mutated when using one of the traversal or mutation
// operations.
names.forEach((name) => console.log(name));
// => Jack
// => Laura
// => Paul
// => Megan
Gli array in JavaScript sono dei normali objects, e gli elementi si possono eliminare usando la parola chiave delete.
Tuttavia, questo non cambia la lunghezza dell'array e lascia un buco empty.
In altri linguaggi, questo è simile a un array sparso.
I buchi empty vengono saltati quando si usano le operazioni di attraversamento o modifica.
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
delete names[1];
names;
// => ["Jack", empty, "Paul", "Megan"]
names.length;
// => 4
names.forEach((name) => console.log(name));
// => Jack
// => Paul
// => Megan
Se non devono esserci buchi, e se length deve riflettere il numero di elementi che verranno attraversati o modificati, usa invece splice.
Il metodo splice() cambia il contenuto di un array rimuovendo o sostituendo elementi esistenti e/o aggiungendo nuovi elementi sul posto.1
Per esempio:
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.splice(1, 1);
names;
// => ["Jack", "Paul", "Megan"]
names.length;
// => 3
names.forEach((name) => console.log(name));
// => Jack
// => Paul
// => Megan
La proprietà length di un array è collegata alla lista degli elementi che l'array contiene.
Può essere modificata.
Quando la lunghezza aumenta, crea dei buchi empty, che non vengono considerati durante l'attraversamento o la modifica dell'array.
Quando la lunghezza diminuisce, rimuove gli elementi alla fine dell'array.
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.length = 6;
names;
// => ["Jack", "Laura", "Paul", "Megan", empty × 2]
names.length = 2;
// => ["Jack", "Laura"]
Poiché gli array sono degli objects, typeof names restituisce "object".
Per verificare se qualcosa è un array, usa Array.isArray:
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
typeof names;
// => "object"
Array.isArray(names);
// => true
const object = {};
Array.isArray(object);
// => false
Potresti essere tentato di usare names instanceof Array, e in effetti può funzionare, ma non in tutte le circostanze.
Leggi questo articolo per saperne di più.
Alcuni dei metodi disponibili su ogni oggetto array si possono usare per aggiungere o rimuovere elementi dall'array. Eccone alcuni:
Il metodo
push()aggiunge uno o più elementi alla fine di un array e restituisce la nuova lunghezza dell'array.2
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.push('Jill'); // => 5
names;
// => ['Jack', 'Laura', 'Paul', 'Megan', 'Jill']
Il metodo
pop()rimuove l'ultimo elemento da un array e restituisce quell'elemento. Questo metodo cambia la lunghezza dell'array.3
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.pop(); // => 'Megan'
names;
// => ['Jack', 'Laura', 'Paul']
Il metodo
shift()rimuove il primo elemento da un array e restituisce quell'elemento rimosso. Questo metodo cambia la lunghezza dell'array.4
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.shift(); // => 'Jack'
names;
// => ['Laura', 'Paul', 'Megan']
Il metodo unshift() aggiunge uno o più elementi all'inizio di un array e restituisce la nuova lunghezza dell'array.5
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.unshift('Jill'); // => 5
names;
// => ['Jill', 'Jack', 'Laura', 'Paul', 'Megan']
Il metodo splice() cambia il contenuto di un array rimuovendo o sostituendo elementi esistenti e/o aggiungendo nuovi elementi sul posto. Questo metodo restituisce un array contenente gli elementi eliminati.1
const names = ['Jack', 'Laura', 'Paul', 'Megan'];
names.splice(2, 1, 'Jill'); // => ['Paul']
names;
// => ['Jack', 'Laura', 'Jill', 'Megan']
splice, MDN. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice (consultato il 29 settembre 2021) ↩
push, MDN. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/push (consultato il 29 settembre 2021) ↩
pop, MDN. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/pop (consultato il 29 settembre 2021) ↩
shift, MDN. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift (consultato il 29 settembre 2021) ↩
unshift, MDN. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/unshift (consultato il 29 settembre 2021) ↩