Ripasso di JavaScript su Array: metodi map() filter() reduce() some() - uso del Set() e dello spread operator
Spiegazione del Codice JavaScript: Gestione di Array e Metodi Avanzati
Questo codice mostra come lavorare con gli array in JavaScript utilizzando diversi metodi per manipolare e analizzare i dati. Prendiamo come esempio un sistema di gestione prodotti di un supermercato.
Dati Iniziali
Il codice parte con tre array che rappresentano i dati di un inventario:
const prodotti = ["Pasta", "Latte", "Caffe", "Biscotti", "Mele", "Detersivo", "Pane", "Tonno"];
const prezzi = [1.20, 1.45, 3.90, 2.10, 2.60, 4.50, 1.10, 5.30];
const quantita = [2, 3, 1, 2, 1, 1, 4, 2];
Ogni prodotto ha una posizione corrispondente negli altri array: la Pasta (posizione 0) costa 1.20€ e ne abbiamo 2 pezzi.
Esercizio 1: Calcolo della Quantità Totale
Metodo Tradizionale con Ciclo For
let totaleArticoli = 0;
for(let i = 0; i<quantita.length; i++){
totaleArticoli += quantita[i];
}
Questo ciclo:
- Inizializza una variabile
totaleArticolia 0 - Scorre tutti gli elementi dell'array
quantita - Somma ogni valore alla variabile totale
Metodo Moderno con reduce()
let ta = quantita.reduce((acc, q) => acc + q, 0);
Il metodo reduce() fa la stessa cosa ma in modo più elegante:
accè l'accumulatore (la somma parziale)qè l'elemento corrente dell'array0è il valore iniziale dell'accumulatore
Esercizio 2: Calcolo del Totale per Riga
let totaliRiga = prezzi.map((p, i) => p * quantita[i]);
Il metodo map():
- Crea un nuovo array trasformando ogni elemento
pè il prezzo corrente,iè l'indice- Moltiplica il prezzo per la quantità corrispondente
- Risultato:
[2.40, 4.35, 3.90, 4.20, 2.60, 4.50, 4.40, 10.60]
Esercizio 3: Filtraggio dei Prodotti
Prodotti Costosi (prezzo > 2.5€)
const prodottiCostosi = prodotti.filter((_, i) => prezzi[i] > 2.5);
Prodotti con Quantità ≥ 2
const prodottiQtaMaggioreDue = prodotti.filter((p, i) => quantita[i] >= 2);
Il metodo filter():
- Crea un nuovo array con solo gli elementi che soddisfano una condizione
_indica che non usiamo il primo parametro (il prodotto stesso)iè l'indice che usiamo per controllare prezzi o quantità
Esercizio 4: Trovare Massimo e Minimo
const prezzoMax = Math.max(...prezzi);
const prezzoMin = Math.min(...prezzi);
Math.max()eMath.min()trovano il valore massimo e minimo...prezziè lo spread operator che "spacchetta" l'array
const nomeMax = prodotti[prezzi.indexOf(prezzoMax)];
const nomeMin = prodotti[prezzi.indexOf(prezzoMin)];
indexOf()trova la posizione del valore nell'array- Usiamo quella posizione per trovare il nome del prodotto corrispondente
Concetti Avanzati
Spread Operator
let nuovoArrayProdotti = [...prodotti, ...prezzi];
Crea un nuovo array combinando due array esistenti.
Metodo some()
const trovato = prodotti.some(el => el.toLowerCase() === 'superdentifriciodelcapitano');
Verifica se almeno un elemento soddisfa una condizione (restituisce true o false).
Attenzione con toFixed()
const votiStudentiNF = votiStudenti.map(el => el.toFixed(2));
Importante: toFixed() trasforma i numeri in stringhe! Questo può causare problemi nelle operazioni matematiche successive.
Eliminare Duplicati con Set
const marvelSenzaDoppioni = [...new Set(marvel)];
Setè una struttura dati che non ammette duplicati- Lo spread operator trasforma il Set in un array normale
Punti Chiave da Ricordare
map(): trasforma ogni elemento creando un nuovo arrayfilter(): seleziona elementi che soddisfano una condizionereduce(): riduce l'array a un singolo valoresome(): verifica se esiste almeno un elemento che soddisfa una condizione- Spread operator (
...): espande gli elementi di un array Set: utile per eliminare duplicati
const prodotti = ["Pasta", "Latte", "Caffe", "Biscotti", "Mele", "Detersivo", "Pane", "Tonno"];
const prezzi = [1.20, 1.45, 3.90, 2.10, 2.60, 4.50, 1.10, 5.30];
const quantita = [2, 3, 1, 2, 1, 1, 4, 2];
// Esercizio 1: calcolare la quantità totale degli articoli
let totaleArticoli = 0;
for(let i = 0; i<quantita.length; i++){
totaleArticoli += quantita[i];
}
console.log("La quantità degli articoli è " + totaleArticoli);
// Esercizio 1 con utilizzando il metodo reduce
let ta = quantita.reduce((acc, q) => acc + q, 0);
console.log("La quantità degli articoli è " + ta);
// Esercizio 2: calcolare il totale della riga (prezzo * quantità) per ogni prodotto
let totaliRiga = prezzi.map((p, i) => p * quantita[i]);
console.log("Totale della riga", totaliRiga);
console.log("Array prezzi", prezzi);
// Esercizio 3: filtrare i prodotti con prezzo maggiore di 2.5
const prodottiCostosi = prodotti.filter((_, i) => prezzi[i] > 2.5);
console.log("Prodotti costosi", prodottiCostosi);
// Esercizio 3: filtrare i prodotti con quantità maggiore o uguale a 2
const prodottiQtaMaggioreDue = prodotti.filter((p, i) => quantita[i] >= 2);
console.log("prodottiQtaMaggioreDue: ", prodottiQtaMaggioreDue);
console.log("Prodotti", prodotti);
//Esercizio 4: trovare il prezzo massimo e minimo e il nome del prodotto corrispondente
const prezzoMax = Math.max(...prezzi);
const prezzoMin = Math.min(...prezzi);
console.log("Prezzo max: ", prezzoMax);
console.log("Prezzo min: ", prezzoMin);
const nomeMax = prodotti[prezzi.indexOf(prezzoMax)];
const nomeMin = prodotti[prezzi.indexOf(prezzoMin)];
console.log("Il nome del prodotto con p. max è: ", nomeMax);
console.log("Il nome del prodotto con p. min è: ", nomeMin);
// Esempio di spread operator per creare un nuovo array prodotti indipendente dagli altri
let nuovoArrayProdotti = [...prodotti, ...prezzi];
console.log("Nuovo array prodotti indipendente ", nuovoArrayProdotti);
// Verificare se un prodotto è presente nell'array prodotti
const trovato = prodotti.some(el => el.toLowerCase() === 'superdentifriciodelcapitano');
console.log("Ho il pane come prodotto ?: ", trovato);
const votiStudenti = [3,4.5,7.5,10,5.5,9.25,5.75];
const votiStudentiNF = votiStudenti.map(el => el.toFixed(2));
// attenzione!: il toFixed(2); trasforma il numero in stringa. Questo è pericoloso
// in quanto una eventuale operazione di somma tra stringhe darebbe origine ad
// una concatenazione
console.log("votiStudenti: ", votiStudenti);
console.log("votiStudentiNF: ", votiStudentiNF);
// Utilizzo di Set per eliminare i duplicati da un array
const marvel = ["Thor", "Hulk", "CP America", "Hulk", "Thor", "Falco"];
const marvelSenzaDoppioni = [...new Set(marvel)];
console.log("Marvel con duplicate", marvel);
console.log("Marvel senza duplicati", marvelSenzaDoppioni);