Array e metodi degli array
Array e metodi degli array in JavaScript
Un array è una collezione ordinata di elementi, identificati da un indice numerico. In JavaScript gli array possono contenere valori di qualsiasi tipo e mettono a disposizione numerosi metodi per la gestione e la trasformazione dei dati.
Dichiarazione e accesso agli elementi
Gli array si dichiarano usando parentesi quadre []
o il costruttore Array()
. Gli elementi sono indicizzati a partire da 0.
Codice Esempio: Creazione e accesso

let frutti = ["Mela", "Banana", "Arancia"];
console.log(frutti[0]); // "Mela"
console.log(frutti.length); // 3
Tabella dei metodi principali
Gli array dispongono di metodi che si dividono in due categorie principali:
Metodo | Descrizione | Mutabile |
---|---|---|
push() | Aggiunge alla fine | Sì |
pop() | Rimuove l’ultimo | Sì |
unshift() | Aggiunge all’inizio | Sì |
shift() | Rimuove il primo | Sì |
splice() | Inserisce/rimuove da indice | Sì |
sort() | Ordina in-place | Sì |
reverse() | Inverte in-place | Sì |
fill() | Riempie intervallo | Sì |
copyWithin() | Copia porzione su altra posizione | Sì |
slice() | Copia porzione | No |
concat() | Unisce array/valori | No |
map() | Trasforma ogni elemento | No |
filter() | Seleziona per condizione | No |
reduce() | Accumula in un valore | No |
forEach() | Esegue callback per elemento | No |
find() / findIndex() | Primo elemento/indice che soddisfa test | No |
indexOf() / lastIndexOf() | Indice prima/ultima occorrenza | No |
includes() | Presenza di un valore | No |
join() | Concatena in stringa | No |
flat() / flatMap() | Appiattisce / mappa+appiattisce | No |
toSorted() | Copia ordinata | No |
toReversed() | Copia invertita | No |
toSpliced() | Copia con inserzioni/rimozioni | No |
with() | Copia con elemento sostituito | No |
Esempi fondamentali
Aggiunta/rimozione

let a = ["mela", "banana"]; // a = ["mela", "banana"]
a.push("kiwi"); // aggiunge "kiwi" alla fine -> a = ["mela", "banana", "kiwi"]
a.pop(); // rimuove l'ultimo elemento -> a = ["mela", "banana"]
a.unshift("pera"); // aggiunge "pera" all'inizio -> a = ["pera", "mela", "banana"]
a.shift(); // rimuove il primo elemento -> a = ["mela", "banana"]
console.log(a); // stampa ["mela", "banana"]
slice (copia) vs splice (modifica)

let b = ["a", "b", "c", "d"];
let copia = b.slice(1, 3);
// Prende gli elementi da indice 1 a 2 (3 escluso) → ["b", "c"], array originale invariato
b.splice(1, 2, "X");
// Da indice 1, elimina 2 elementi ("b","c") e inserisce "X" → ["a", "X", "d"]
console.log(copia, b);
// Output:
// ["b", "c"] ["a", "X", "d"]
Ricerca e verifica

let nums = [3, 7, 9, 12, 7];
console.log(nums.includes(7));
// Verifica se 7 è presente → true
console.log(nums.indexOf(7));
// Primo indice di 7 → 1
console.log(nums.lastIndexOf(7));
// Ultimo indice di 7 → 4
console.log(nums.find(x => x % 3 === 0));
// Primo elemento divisibile per 3 → 3
console.log(nums.findIndex(x => x > 10));
// Indice del primo elemento > 10 → 3
console.log(nums.some(x => x < 0));
// Verifica se esiste un elemento < 0 → false
console.log(nums.every(x => x > 0));
// Verifica se tutti gli elementi > 0 → true
Ordinamento corretto

let num = [10, 2, 5];
num.sort((x, y) => x - y);
// Ordina l'array crescente (modifica originale) → [2, 5, 10]
let ordCopia = num.toSorted((x, y) => y - x);
// Ordina decrescente senza modificare 'num' → [10, 5, 2]
let nomi = ["Luca", "anna", "Álvaro"];
let ordIt = nomi.toSorted((x, y) =>
x.localeCompare(y, "it", { sensitivity: "base" })
);
// Ordina in ordine alfabetico italiano ignorando maiuscole/minuscole → ["anna", "Álvaro", "Luca"]
console.log(num, ordCopia, ordIt);
// Output:
// [2, 5, 10] [10, 5, 2] ["anna", "Álvaro", "Luca"]
Trasformazioni e riduzioni

let v = [1, 2, 3, 4]; // Array iniziale: [1, 2, 3, 4]
let doppi = v.map(n => n * 2); // Moltiplica ogni numero per 2 → [2, 4, 6, 8]
let pari = v.filter(n => n % 2 === 0); // Tieni solo i numeri pari → [2, 4]
let somma = v.reduce((acc, n) => acc + n, 0); // Somma tutti i numeri → 10
v.forEach(n => console.log(n)); // Stampa ogni numero su una riga:
// 1
// 2
// 3
// 4
console.log(doppi, pari, somma); // Stampa i risultati finali:
// [2, 4, 6, 8] [2, 4] 10
flat e flatMap

let nested = [1, [2, [3]]]; // Array con numeri e array dentro array (annidato)
console.log(nested.flat(2)); // Appiattisce fino a 2 livelli → [1, 2, 3]
let parole = ["cane", "gatto"];
let chars = parole.flatMap(p => p.split("")); // Divide ogni parola in lettere e unisce tutto in un solo array
console.log(chars); // ["c", "a", "n", "e", "g", "a", "t", "t", "o"]
Operazioni immutabili moderne

let c = [1, 2, 3];
let r = c.toReversed(); // Inverte l'array senza modificarlo → [3, 2, 1]
let s = c.toSpliced(1, 1, 9); // Sostituisce 1 elemento da indice 1 con 9 → [1, 9, 3]
let w = c.with(0, 7); // Sostituisce l'elemento in posizione 0 con 7 → [7, 2, 3]
console.log(r, s, w, c);
// Output:
// [3, 2, 1] [1, 9, 3] [7, 2, 3] [1, 2, 3]
// Nota: 'c' rimane invariato
concat, join, fill, copyWithin

let d = [1, 2].concat([3, 4]); // Unisce due array → [1, 2, 3, 4]
console.log(["a", "b", "c"].join("-")); // Concatena elementi con "-" → "a-b-c"
let e = new Array(5).fill(0); // Crea array di 5 zeri → [0, 0, 0, 0, 0]
e.copyWithin(1, 0, 2); // Copia gli elementi da indici 0..1 su posizioni a partire da 1. Ma gli elementi copiati sono già 0, quindi l’array resta → [0, 0, 0, 0, 0]
console.log(d, e);
// Output:
// [1, 2, 3, 4] [0, 0, 0, 0, 0]
Esempio pratico con più metodi
Codice Esempio: Utilizzo di metodi vari

let numeri = [1, 2, 3, 4];
numeri.push(5); // [1, 2, 3, 4, 5]
numeri.shift(); // [2, 3, 4, 5]
let doppi = numeri.map(x => x * 2); // [4, 6, 8, 10]
let filtrati = doppi.filter(x => x > 5); // [6, 8, 10]
let somma = filtrati.reduce((acc, val) => acc + val, 0); // 24
console.log(somma);
Considerazioni
Comprendere la differenza tra metodi mutabili e non mutabili è fondamentale per evitare comportamenti inattesi nel codice.
Mutabili: Metodi come sort()
, reverse()
, splice()
, fill()
, copyWithin()
modificano l’array originale.
Immutabili: Se serve immutabilità, preferisci slice()
, concat()
, map()
, filter()
, reduce()
oppure le versioni moderne toSorted()
, toReversed()
, toSpliced()
, with()
.