Vai al contenuto
eLearner.app
Modulo 3 · Lezione 3 di 411/32 nel corso~12 min
Lezioni del modulo (3/4)

Destructuring e spread

Due sintassi figlie della stessa famiglia, introdotte da ES6 e diventate pane quotidiano di chiunque scriva JS moderno:

  • Destructuring: estrai più valori da array/oggetti in una sola riga.
  • Spread ...: "spalma" un array o un oggetto dentro un altro.

Insieme rendono il codice molto più conciso e leggibile.

Destructuring di oggetti

Letto in italiano: "crea le costanti nome ed eta con i valori delle proprietà omonime di utente".

JS
const utente = { nome: 'Anna', eta: 28, ruolo: 'admin' };

const { nome, eta } = utente;
console.log(nome); // 'Anna'
console.log(eta); // 28

Rinominare

Aggiungi : nuovoNome dopo la chiave:

JS
const { nome: n, eta: years } = utente;
// crea le variabili n e years

Valore di default

Se la proprietà manca (o è undefined), si usa il default:

JS
const { ruolo = 'reader', telefono = 'n/d' } = utente;
// ruolo = 'admin' (presente), telefono = 'n/d' (assente)

Destructuring di array

Funziona per posizione:

JS
const colori = ['rosso', 'verde', 'blu'];
const [primo, secondo] = colori;
// primo = 'rosso', secondo = 'verde'

const [, , terzo] = colori; // salta i primi due
const [a, ...resto] = colori; // a = 'rosso', resto = ['verde','blu']

Spread sugli array

...arr "spalma" gli elementi:

JS
const a = [1, 2, 3];
const b = [4, 5];

const unione = [...a, ...b]; // [1, 2, 3, 4, 5]
const copia = [...a]; // copia superficiale di a
const conPiu = [0, ...a, 4]; // [0, 1, 2, 3, 4]

Spread sugli oggetti

Le chiavi successive sovrascrivono quelle precedenti — fondamentale per gli aggiornamenti immutabili:

JS
const utente = { nome: 'Anna', eta: 28 };

const aggiornato = { ...utente, eta: 29 };
// { nome: 'Anna', eta: 29 } — utente NON è stato toccato

const con = { ...utente, attivo: true };
// { nome: 'Anna', eta: 28, attivo: true }

Prova tu

Esercizio#js.m3.l3.e1
Tentativi: 0Caricamento…

Dato `user = { name: 'Marco', age: 34, city: 'Torino' }`, estrai con destructuring le sole `name` e `city` in due costanti e restituisci `\`${name} di ${city}\`` (deve valere 'Marco di Torino').

Caricamento editor…
Mostra suggerimento

const { name, city } = user; poi un template literal con i due valori.

Soluzione disponibile dopo 3 tentativi

Esercizio di ripasso

Esercizio#js.m3.l3.e2
Tentativi: 0Caricamento…

Dato `base = { theme: 'dark', size: 'md' }`, restituisci un NUOVO oggetto identico ma con `size` impostato a 'lg' usando lo spread.

Caricamento editor…
Mostra suggerimento

L'ultima espressione deve essere l'oggetto. Avvolgilo fra parentesi tonde: ({ ...base, ... }).

Soluzione disponibile dopo 3 tentativi