Scopri come lavorare con gli array, i metodi principali e le operazioni più comuni.
Cos'è un Array?
Un array è una struttura dati che permette di memorizzare collezioni ordinate di elementi. Invece di avere 10 variabili separate per 10 numeri, puoi usare un singolo array!
Array nella Vita Reale
Pensa a un array come a una lista della spesa: hai una lista con vari elementi (pane, latte, uova), ciascuno in una posizione specifica. Puoi aggiungere elementi, rimuoverli, cercare se un elemento è presente, e molto altro!
✨ Caratteristiche Array JavaScript
- ✅ Dinamici: La dimensione può cambiare
- ✅ Eterogenei: Possono contenere tipi diversi
- ✅ Indicizzati: Accesso per posizione (da 0)
- ✅ Ordinati: Gli elementi mantengono l'ordine
Creazione Array
- Array Literal (Consigliato)
Il modo più comune e leggibile per creare array.
Creazione con []
// Array di numeri
let numeri = [1, 2, 3, 4, 5];
// Array di stringhe
let frutti = ["mela", "banana", "arancia"];
// Array vuoto
let vuoto = [];
// Array di tipi misti
let misto = [1, "due", true, null];
console.log(numeri); // [1, 2, 3, 4, 5]
console.log(frutti); // ["mela", "banana", "arancia"]
- Costruttore Array()
Meno usato, utile in casi specifici.
Creazione con new Array()
// Array con elementi
let numeri = new Array(1, 2, 3); // [1, 2, 3]
// Array di lunghezza specifica (vuoto)
let vuoto = new Array(5); // 5 slot vuoti
// ⚠️ Attenzione: un solo numero crea array vuoto!
let confuso = new Array(5); // 5 slot vuoti
let chiaro = [5]; // [5] (array con elemento 5)
// Meglio usare [] per chiarezza!
Accesso agli Elementi
Indici degli Array
Gli array JavaScript sono zero-indexed: il primo elemento è all'indice 0, il secondo all'indice 1, e così via.
Accesso per Indice
let frutti = ["mela", "banana", "arancia", "pera", "kiwi"];
// Accesso per indice positivo
console.log(frutti[0]); // "mela" (primo elemento)
console.log(frutti[1]); // "banana"
console.log(frutti[2]); // "arancia"
// Ultimo elemento
let ultimo = frutti[frutti.length - 1]; // "kiwi"
// Penultimo
let penultimo = frutti[frutti.length - 2]; // "pera"
// Indice non esistente
console.log(frutti[10]); // undefined
Proprietà length
let numeri = [10, 20, 30, 40, 50];
// Lunghezza array
console.log(numeri.length); // 5
// Modificare length
numeri.length = 3;
console.log(numeri); // [10, 20, 30] (troncato!)
// Svuotare array
numeri.length = 0;
console.log(numeri); // [] (array vuoto)
⚠️ Array Sono Mutabili!
Puoi modificare elementi esistenti assegnando un nuovo valore.
let frutti = ["mela", "banana", "arancia"];
// Modifica elemento
frutti[1] = "fragola";
console.log(frutti); // ["mela", "fragola", "arancia"]
Aggiungere Elementi
- push() - Aggiunge alla Fine
Metodo più usato. Modifica l'array originale e restituisce la nuova lunghezza.
Metodo push()
let numeri = [1, 2, 3];
// Aggiungi un elemento
numeri.push(4);
console.log(numeri); // [1, 2, 3, 4]
// Aggiungi più elementi
numeri.push(5, 6, 7);
console.log(numeri); // [1, 2, 3, 4, 5, 6, 7]
// Restituisce la nuova lunghezza
let lunghezza = numeri.push(8);
console.log(lunghezza); // 8
- unshift() - Aggiunge all'Inizio
Inserisce all'inizio spostando tutti gli altri elementi.
Metodo unshift()
let numeri = [3, 4, 5];
// Aggiungi all'inizio
numeri.unshift(2);
console.log(numeri); // [2, 3, 4, 5]
// Aggiungi più elementi
numeri.unshift(0, 1);
console.log(numeri); // [0, 1, 2, 3, 4, 5]
📊 Confronto Metodi di Aggiunta
| Metodo | Dove Aggiunge | Restituisce | Performance |
|---|---|---|---|
push() |
Fine | Nuova lunghezza | ⭐⭐⭐ Veloce |
unshift() |
Inizio | Nuova lunghezza | ⭐ Lento (sposta tutto) |
Rimuovere Elementi
- pop() - Rimuove dalla Fine
Rimuove e restituisce l'ultimo elemento.
Metodo pop()
let numeri = [1, 2, 3, 4, 5];
// Rimuovi ultimo elemento
let ultimo = numeri.pop();
console.log(ultimo); // 5
console.log(numeri); // [1, 2, 3, 4]
// Rimuovi ancora
numeri.pop();
console.log(numeri); // [1, 2, 3]
- shift() - Rimuove dall'Inizio
Rimuove e restituisce il primo elemento.
Metodo shift()
let numeri = [1, 2, 3, 4, 5];
// Rimuovi primo elemento
let primo = numeri.shift();
console.log(primo); // 1
console.log(numeri); // [2, 3, 4, 5]
// Rimuovi ancora
numeri.shift();
console.log(numeri); // [3, 4, 5]
🗑️ Confronto Metodi di Rimozione
| Metodo | Cosa Rimuove | Restituisce | Quando Usare |
|---|---|---|---|
pop() |
Ultimo elemento | Elemento rimosso | Stack (LIFO) |
shift() |
Primo elemento | Elemento rimosso | Queue (FIFO) |
Metodi di Ricerca
| Metodo | Descrizione | Ritorna | Esempio |
|---|---|---|---|
indexOf() |
Trova prima occorrenza | Indice o -1 | [1,2,3].indexOf(2) → 1 |
lastIndexOf() |
Trova ultima occorrenza | Indice o -1 | [1,2,3,2].lastIndexOf(2) → 3 |
includes() |
Verifica presenza | true/false | [1,2,3].includes(2) → true |
Esempi Metodi di Ricerca
let numeri = [10, 20, 30, 20, 40];
// indexOf - prima occorrenza
console.log(numeri.indexOf(20)); // 1
console.log(numeri.indexOf(99)); // -1 (non trovato)
// lastIndexOf - ultima occorrenza
console.log(numeri.lastIndexOf(20)); // 3
// includes - verifica presenza
console.log(numeri.includes(30)); // true
console.log(numeri.includes(99)); // false
Metodi di Trasformazione
slice() - Estrae Porzione (Non Modifica Originale)
let numeri = [1, 2, 3, 4, 5];
// slice(inizio, fine) - fine esclusa
console.log(numeri.slice(1, 3)); // [2, 3]
console.log(numeri.slice(2)); // [3, 4, 5] (da 2 fino alla fine)
console.log(numeri.slice(-2)); // [4, 5] (ultimi 2)
// Array originale invariato
console.log(numeri); // [1, 2, 3, 4, 5]
concat() - Unisce Array (Non Modifica Originale)
let arr1 = [1, 2];
let arr2 = [3, 4];
let arr3 = [5, 6];
// Unisci array
let unito = arr1.concat(arr2);
console.log(unito); // [1, 2, 3, 4]
// Unisci più array
let tuttiUniti = arr1.concat(arr2, arr3);
console.log(tuttiUniti); // [1, 2, 3, 4, 5, 6]
join() - Converte in Stringa
let frutti = ["mela", "banana", "arancia"];
// join() con separatore
console.log(frutti.join()); // "mela,banana,arancia" (default: virgola)
console.log(frutti.join(" ")); // "mela banana arancia"
console.log(frutti.join(" - ")); // "mela - banana - arancia"
console.log(frutti.join("")); // "melabananaarancia"
reverse() - Inverte Ordine (Modifica Originale!)
let numeri = [1, 2, 3, 4, 5];
// Inverte l'array
numeri.reverse();
console.log(numeri); // [5, 4, 3, 2, 1]
// ⚠️ Modifica l'array originale!
⚠️ Metodi che Modificano l'Array Originale
Modificano:
- push(), pop()
- shift(), unshift()
- reverse()
Non Modificano:
- slice()
- concat()
- join()
Iterare sugli Array
Loop for Classico
let frutti = ["mela", "banana", "arancia"];
// for classico
for (let i = 0; i < frutti.length; i++) {
console.log(i + ": " + frutti[i]);
}
// 0: mela
// 1: banana
// 2: arancia
// Stampa al contrario
for (let i = frutti.length - 1; i >= 0; i--) {
console.log(frutti[i]);
}
// arancia
// banana
// mela
Esercizi Pratici Interattivi
Esercizio 1: Lista della Spesa
Obiettivo: Gestisci una lista della spesa
Funzionalità:
- Aggiungi prodotti alla lista
- Visualizza tutti i prodotti
- Rimuovi ultimo prodotto
- Cerca se un prodotto esiste
Mostra la soluzione
Soluzione Esercizio 1
let listaSpesa = ["pane", "latte", "uova"];
let continua = true;
while (continua) {
let menu = "🛒 LISTA DELLA SPESA\n\n";
menu += "1. Aggiungi prodotto\n";
menu += "2. Mostra lista\n";
menu += "3. Rimuovi ultimo\n";
menu += "4. Cerca prodotto\n";
menu += "5. Esci\n\n";
menu += "Scegli:";
let scelta = prompt(menu);
if (scelta === "1") {
let prodotto = prompt("Inserisci prodotto:");
if (prodotto) {
listaSpesa.push(prodotto.toLowerCase());
alert("✅ " + prodotto + " aggiunto!");
}
} else if (scelta === "2") {
if (listaSpesa.length === 0) {
alert("📋 Lista vuota!");
} else {
let testo = "📋 LISTA:\n\n";
for (let i = 0; i < listaSpesa.length; i++) {
testo += (i + 1) + ". " + listaSpesa[i] + "\n";
}
alert(testo);
}
} else if (scelta === "3") {
if (listaSpesa.length === 0) {
alert("❌ Lista vuota!");
} else {
let rimosso = listaSpesa.pop();
alert("✅ " + rimosso + " rimosso!");
}
} else if (scelta === "4") {
let cerca = prompt("Cerca:");
if (listaSpesa.includes(cerca.toLowerCase())) {
alert("✅ Trovato!");
} else {
alert("❌ Non trovato!");
}
} else {
continua = false;
}
}
Esercizio 2: Trova Numeri Pari
Obiettivo: Trova tutti i numeri pari in un array
Compiti:
- Chiedi numeri all'utente
- Trova i numeri pari
- Mostra risultati
Mostra la soluzione
Soluzione Esercizio 2
// Chiedi numeri
let input = prompt("Inserisci numeri separati da virgola:");
let numeriStr = input.split(",");
// Converti in numeri
let numeri = [];
for (let i = 0; i < numeriStr.length; i++) {
let num = parseInt(numeriStr[i]);
if (!isNaN(num)) {
numeri.push(num);
}
}
// Trova pari
let pari = [];
for (let i = 0; i < numeri.length; i++) {
if (numeri[i] % 2 === 0) {
pari.push(numeri[i]);
}
}
// Mostra risultati
let risultato = "🔢 RISULTATI\n\n";
risultato += "Numeri: " + numeri.join(", ") + "\n\n";
risultato += "Pari: " + pari.join(", ") + "\n";
risultato += "Totale pari: " + pari.length;
alert(risultato);
Esercizio 3: Inverti Array
Obiettivo: Inverti l'ordine di un array SENZA usare reverse()
Compiti:
- Chiedi elementi all'utente
- Invertili manualmente con un loop
- Mostra array originale e invertito
Mostra la soluzione
Soluzione Esercizio 3
// Chiedi elementi
let input = prompt("Inserisci elementi separati da virgola:");
let originale = input.split(",");
// Pulisci spazi
for (let i = 0; i < originale.length; i++) {
originale[i] = originale[i].trim();
}
// Inverti MANUALMENTE
let invertito = [];
for (let i = originale.length - 1; i >= 0; i--) {
invertito.push(originale[i]);
}
// Mostra risultati
let risultato = "🔄 INVERSIONE\n\n";
risultato += "Originale:\n" + originale.join(", ") + "\n\n";
risultato += "Invertito:\n" + invertito.join(", ") + "\n\n";
risultato += "💡 Fatto SENZA reverse()!";
alert(risultato);
🎯 Riepilogo Lezione
Creazione:
- [] literal
- new Array()
- .length proprietà
Aggiunta/Rimozione:
- push() / pop()
- unshift() / shift()
- [indice] = valore
Ricerca:
- indexOf()
- lastIndexOf()
- includes()
Trasformazione:
- slice()
- concat()
- join()
- reverse()