In JavaScript un object può avere i più svariati utilizzi. Possiamo utilizzarlo per avere una rappresentazione di un'informazione, un insieme di funzioni o di dati. Ma non per questo non esistono strumenti migliori o più performanti; ad esempio per un dizionario è consigliato l'utilizzo di Map.
Vediamo prima di cosa stiamo parlando attraverso l'utilizzo di oggetti.
// oggetto vuoto const myObj = {} // assegnazione myObj["XY"] = 123 //rimozione delete myObj["XY"]
Benchè il codice sia perfettamente funzionante, non è di certo performante. Infatti come indicato nella documentazione, non è consigliato per operazioni intensive di aggiunta/rimozione di chiavi/valori. Vediamone quindi la trasposizione utilizzando Map.
const myMap = new Map() // assegnazione myMap.set("XY", 123) //rimozione myMap.delete("XY")
Uno dei problemi principali quando trattiamo gli oggetti è che per loro natura contengono molte funzioni che, anche se l'oggetto non è ancora popolato, potrebbero restituire valori. A queste funzioni possono accedere tutte le funzioni che avranno accesso all'oggetto e allo stesso tempo potranno sovrascriverle; situazione non ottimale in un programma in cui si ricerca la massima sicurezza. Inoltre l'iterazione può avvenire in vari modi, e può generare altrettati possibili errori.
const myObj = {} myObj.valueOf myObj.toString myObj.hasOwnProperty [...] for (const key in myObject) { // Potrebbe iterare su chiavi inattese } for (const key in myObj) { if (myObj.hasOwnProperty(key)) { // conferma che l'oggetto contenga la chiave, ma potrebbe essere stata sovrascritta in precedenza tramite // myObj.hasOwnProperty = () => myCustomFunction() } } Object.keys(myObject).forEach(key => { // itearazione ottimale, ma particolare e non di facile intuizione })
Con l'utilizzo di Map possiamo fare tutto tramite un classico foreach. Manterremo inoltre un ordine temporale rispetto all'inserimento degli oggetti, il che ci permetterà di estrarre uno specifico valore sulla base del suo inserimento.
for (const [key, value] of myMap) { // decostruzione dell'elemento in key/value } const myMap = new Map([['key', 'value'], ['keyTwo', 'valueTwo']]) // decostruzione dell'oggetto const [[a,b],[c,d]] = myMap // a=>key // b=>value // c=>keyTwo // d=>valueTwo
Essendo Map un oggetto nativo in JavaScript, abbiamo, se necessaria, la possibilità di passare da uno all'altro attraverso metodi di conversione.
const myObj = Object.fromEntries(myMap) const myMap = new Map(Object.entries(myObj))
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Come EF 8 ha ottimizzato le query che usano il metodo Contains
Eliminare una project wiki di Azure DevOps
Path addizionali per gli asset in ASP.NET Core MVC
Limitare le richieste lato server con l'interactive routing di Blazor 8
Gestione dei nomi con le regole @layer in CSS
Change tracking e composition in Entity Framework
Filtering sulle colonne in una QuickGrid di Blazor
Creare una libreria CSS universale: i bottoni
Utilizzare gRPC su App Service di Azure
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Miglioramenti agli screen reader e al contrasto in Angular
Supportare il sorting di dati tabellari in Blazor con QuickGrid
I più letti di oggi
- Dal MIX08 la nuova Beta1 di Internet Explorer 8.0
- Windows Phone 7: CTP di Visual Basic per Windows Phone
- Disponibile l'Update 1 per Entity Framework 4.1
- Microsoft Security Bulletin MS05-004
- VS 2005 e SQL Server 2005 February 2005 CTP
- Il Python sul .NET Framework 2.0 con IronPython 1.0 beta 1
- Mono 1.2.3 con il compilatore Visual Basic 8.0
- Recuperare i dati da ListView di ASP.NET senza usare FindControl
- Lavorare con le dropdown list in ASP.NET Core MVC