In JavaScript esiste un metodo chiamato reduce. Rilasciato nel lontano 2011 con ECMAScript 5 insieme ai ben più noti map, filter o indexOf, è molto meno utilizzato e spesso incompreso nella sua funzionalità, ma permette di scrivere all'interno di un unica riga operazioni ben più complesse.
Prendendo una definizione generalista: reduce permette, tramite una funzione, di condensare gli elementi di un array in un singolo valore. Prendiamo in esame l'esempio seguente, in cui, partendo da un array di numeri, ne ricaviamo la somma.
const numbers = [12, 2, 11, 6]; const initialValue = 0; var sum = numbers.reduce(sum, initialValue); function sum(total, num) { return total + num; }
Quello appena presentato non è altro che la riscrittura di un ciclo for:
const numbers = [12, 2, 11, 6]; const initialValue = 0; let acc = 0; for(let i=0;i<numbers.length;i++){ acc += numbers<i>; }
Con reduce possimo utilizzare anche una funzione inline, evitandoci di crearne una ad-hoc per ogni necessità, riducendo dunque le righe di codice. La funzione seguente, ad esempio, esegue le stesse operazioni di una map, andando a moltiplicare ogni elemento per 5 e restituendo, di volta in volta, l'array di valori:
const numbers = [12, 2, 11, 6]; numbers.reduce((acc,num)=> acc.concat(num*5),[]);
Possiamo scrivere l'analogo di filter, andando a restituire, all'interno della funzione, l'array di valori in base a specifiche condizioni.
const numbers = [12, 2, 11, 6]; numbers.reduce((acc,num)=> return num > 5 ? acc.concat(num) : acc, []);
Ma anche trovare il valore più alto o più basso
const numbers = [2, 12, 2, 11, 6]; // non fornendo il valore iniziale, verrà preso il primo valore dell'array: 2 numbers.reduce((acc,num)=> num > acc ? num : acc);
Quelli riportati sono solo alcuni esempi riguardanti le possibilità di utilizzo del metodo reduce, che si dimostra elastico e malleabile per ogni caso d'uso, e rende possibile anche funzionalità come l'ordinamento o l'inversione gli elementi in un array, l'esecuzione di un mapping da array di oggetti a oggetto con più proprietà o lavorare con matrici.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Eseguire i worklow di GitHub su runner potenziati
Gestione degli eventi nei Web component HTML
Utilizzare DeepSeek R1 con Azure AI
Utilizzare il metodo ExceptBy per eseguire operazione di sottrazione tra liste
Creare una libreria CSS universale: Nav menu
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Sfruttare GPT-4o realtime su Azure Open AI per conversazioni vocali
Collegare applicazioni server e client con .NET Aspire
Recuperare automaticamente un utente e aggiungerlo ad un gruppo di Azure DevOps
Eliminare una project wiki di Azure DevOps
Eliminare record doppi in Sql Server
Generare la software bill of material (SBOM) in GitHub
I più letti di oggi
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il pattern matching per semplificare le espressioni
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare requestAnimationFrame per animazioni fluide
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!