JavaScript Object.keys, values, entries
Scopri Object.keys, Object.values, Object.entries e Object.fromEntries con esempi eseguibili: itera object con for...of e destructuring, comprendi l'ordinamento delle chiavi e il confronto con i metodi di Map.
Iterare sugli Object in JavaScript
I object semplici sono la struttura principale di JavaScript per i dati chiave-valore, ma a differenza degli array, gli object non sono direttamente iterabili — non puoi scorrerli con for...of né passarli direttamente a metodi array come map e filter. Per colmare questa lacuna, JavaScript mette a disposizione tre metodi complementari che trasformano le proprietà proprie di un object in un array normale:
Object.keys(obj)— un array dei nomi delle proprietà.Object.values(obj)— un array dei valori delle proprietà.Object.entries(obj)— un array di coppie[key, value].
Una volta che la lista di proprietà è un array, tutti gli strumenti degli array diventano disponibili. Un quarto metodo, Object.fromEntries, esegue il processo inverso, ricostruendo un object da una lista di coppie. Questa pagina tratta ciascun metodo, come iterare in modo pulito con for...of e il destructuring, le regole che determinano l'ordine delle proprietà e le differenze rispetto ai metodi equivalenti su una Map.
Tutti e tre i metodi restituiscono solo le proprietà proprie (non ereditate) ed enumerabili con chiave string dell'object. Ignorano le proprietà ereditate dal prototipo e le chiavi di tipo Symbol.
Comprendere Object.keys
Object.keys(obj) restituisce un array con i nomi delle proprietà enumerabili proprie di un dato object. È utile ogni volta che occorre contare le proprietà, verificare l'esistenza di una chiave o iterare sulle chiavi.
Esempio d'uso di Object.keys
Esplorare Object.values
Object.values(obj) restituisce un array con i valori delle proprietà enumerabili proprie di un dato object, nello stesso ordine delle chiavi restituite da Object.keys.
Esempio d'uso di Object.values
Sfruttare Object.entries
Object.entries(obj) restituisce un array di coppie [key, value] enumerabili proprie con chiave string di un dato object. È il più flessibile dei tre perché ogni elemento porta con sé entrambe le informazioni.
Esempio d'uso di Object.entries
Iterare con for...of e il Destructuring
Poiché Object.entries restituisce un array, puoi scorrerlo con for...of e spacchettare ciascuna coppia usando il destructuring. Questo è il modo più pulito e leggibile per attraversare le proprietà di un object:
Puoi anche iterare sulle sole chiavi o sui soli valori:
Suggerimento:
for...ofsuObject.entriesè preferibile a un semplice ciclofor...in, perchéfor...inscorre anche le proprietà enumerabili ereditate dalla catena del prototipo, mentreObject.entriesnon lo fa.
Trasformare gli Object con Object.fromEntries
Object.fromEntries inverte Object.entries: prende una lista di coppie [key, value] e costruisce un object. Insieme formano un percorso di andata e ritorno — trasforma un object in coppie, elabora le coppie con i metodi degli array, poi riconvertile in un object.
Esempio: Conversione di Andata e Ritorno
Object.fromEntries accetta anche qualsiasi iterabile di coppie — inclusa una Map — rendendolo un modo rapido per convertire una Map in un object semplice. Vedi Map and Set per ulteriori informazioni sulle map. Consente una conversione fluida tra strutture array e object, facilitando una gestione dei dati più flessibile.
Regole sull'Ordine delle Proprietà
L'ordine delle chiavi restituite da questi metodi non è arbitrario — JavaScript segue una regola definita:
- Chiavi di tipo intero (chiavi che sembrano interi non negativi, ad es.
"1","42") vengono prima, ordinate in ordine numerico crescente. - Chiavi string seguono, nell'ordine in cui sono state inserite.
- Chiavi Symbol vengono per ultime (ma questi metodi le ignorano comunque).
Questo comportamento di "ordinamento delle chiavi intere" sorprende molti sviluppatori:
Se hai bisogno di preservare l'ordine di inserimento per le chiavi numeriche, rendi le chiavi non intere — ad esempio aggiungendo un prefisso + in modo che non siano più di tipo intero:
Differenze rispetto ai Metodi di Map
Una Map ha anch'essa i metodi keys(), values() e entries(), ma si comportano diversamente rispetto alle versioni statiche Object.* in due modi importanti:
- Sintassi: i metodi di
Mapsi invocano sull'istanza —map.keys()— mentre i metodi degli object sono statici e ricevono l'object come argomento —Object.keys(obj). - Tipo restituito: i metodi di
Maprestituiscono un iteratore (puoi scorrerlo confor...of, ma non è un array). I metodiObject.*restituiscono sempre un vero array, quindi i metodi array comemap,filterereducefunzionano immediatamente.
Una Map preserva inoltre l'ordine di inserimento per tutte le chiavi (incluse quelle numeriche) e permette chiavi di qualsiasi tipo, mentre gli object semplici convertono le chiavi in string e ordinano le chiavi di tipo intero. Quando l'ordine di iterazione o le chiavi non string sono importanti, preferisci una Map.
Tecniche Avanzate di Manipolazione degli Object
Filtrare le Proprietà di un Object
Combinare i metodi degli array con Object.entries e Object.fromEntries consente trasformazioni potenti — come mantenere solo le proprietà che superano un test.
Esempio di Filtraggio
Mappare le Proprietà di un Object
Analogamente, Object.entries combinato con map permette di trasformare ogni valore (o chiave) e ricostruire l'object.
Esempio di Mappatura
Conclusione
Object.keys, Object.values e Object.entries sono il ponte tra gli object semplici e il ricco insieme di strumenti degli array in JavaScript, mentre Object.fromEntries chiude il cerchio trasformando le coppie di nuovo in object. Insieme a for...of e al destructuring, rendono l'iterazione, il filtraggio e la trasformazione dei dati degli object puliti e leggibili. Tieni a mente le regole sull'ordine delle proprietà e scegli una Map quando hai bisogno di un ordine di inserimento garantito o di chiavi non string.