2016-04-12 45 views
6

Qualcuno sa se è possibile utilizzare la destrutturazione di oggetti con spazi nel nome della proprietà? Forse questo non può essere fatto e mi rendo conto che la notazione JavaScript è errata ma non posso modificare la risposta del server JSON.Distruzione di oggetti con nomi di proprietà che non sono nomi di variabili validi

var obj1 = {name: 'Mr Smith', age: 21}; 
//destructure 
var {name, age} = obj1; 
//name='Mr Smith' and age=21 

Funziona come previsto.

Ma quando ho la seguente struttura di oggetti posso usare la destrutturazione di oggetti o no?

var obj2 = {"my name": "Mr Jones", age: 22}; 
var {'my name', age} = obj2; 

Se ciò non fosse possibile, sarebbe bello se potessi assegnare la variabile con una sorta di sintassi del tipo 'come' ...

var {'my name' as name, age} = obj2; //name='Mr Jones'; 

Grazie

+0

Possibile duplicato [ES6 oggetto destrutturazione e variabile di destinazione cambia] (https://stackoverflow.com/q/34904523/1048572) – Bergi

risposta

10

È possibile assegnare un nome di variabile valido utilizzando questa sintassi:

var {"my name": myName, age} = obj2; 

// use myName here 
+0

Grande ! grazie, non sapevo che potresti cambiare il nome della proprietà in quel modo. Anche se lo dice nei documenti dattiloscritto, quindi dovresti averlo controllato prima! Il mio cattivo .. https://www.typescriptlang.org/docs/handbook/variable-declarations.html – keano

+1

@keano la [documentazione su mdm] (https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment) è abbastanza buono. Almeno in futuro qualcuno sarà in grado di trovarlo facilmente qui. –

5

Quando ho un n oggetto con spazi nel nome della proprietà posso usare la destrutturazione dell'oggetto o no?

Sì, è possibile utilizzare la destrutturazione, ma è sempre possibile assegnare solo identificatori (nomi di variabili). Poiché questi non consentono spazi, non è possibile utilizzare la sintassi abbreviata in cui nome e identificatore di proprietà sono gli stessi.

Sarebbe bello se potessi assegnare la variabile con una sorta di sintassi del tipo 'come':

var {'my name' as name, age} = obj2; 

as è per moduli importazioni/esportazioni. Per gli oggetti normali - sia letterali e destrutturazione - si utilizza il colon ::

var {'my name': name, age} = obj2; 
+0

Ho usato la parola chiave 'as' per l'importazione dei moduli ho pensato che esistesse una sorta di sintassi simile durante la destrutturazione degli oggetti ... grazie per la spiegazione però :) – keano

+0

Interessante, non lo sapevo mai! Peccato non c'è modo di destrutturare dinamicamente un oggetto, simile a 'extract()' di PHP, o c'è? –

+0

@IfediOkonkwo I nomi delle variabili dinamiche sono una pita. E in realtà JS [li ha] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/with) - ma tu davvero non vuoi usare questo. Meglio usare i nomi delle proprietà calcolate e la destrutturazione in variabili conosciute. – Bergi