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 invariatob.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 → trueconsole.log(nums.indexOf(7));
// Primo indice di 7 → 1console.log(nums.lastIndexOf(7));
// Ultimo indice di 7 → 4console.log(nums.find(x => x % 3 === 0));
// Primo elemento divisibile per 3 → 3console.log(nums.findIndex(x => x > 10));
// Indice del primo elemento > 10 → 3console.log(nums.some(x => x < 0));
// Verifica se esiste un elemento < 0 → falseconsole.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// 4console.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().

IP: 216.73.216.214