2015-12-10 18 views
10

Recentemente ho iniziato a utilizzare la sintassi dell'assegnazione dell'ES6 destructuring e ho iniziato a familiarizzare con il concetto. Mi stavo chiedendo se è possibile estrarre una proprietà nidificata usando la stessa sintassi.Distruzione delle proprietà profonde

Per esempio, diciamo che ho il seguente codice:

let cagingIt = { 
    foo: { 
    bar: 'Nick Cage' 
    } 
}; 

So che sono in grado di accedere estratto foo in una variabile facendo:

// where foo = { bar: "Nick Cage" } 
let { foo } = cagingIt; 

Tuttavia, è possibile estrai una proprietà profondamente annidata, come bar. Forse qualcosa del genere:

Ho provato a trovare documentazione sull'argomento, ma senza risultato. Qualsiasi aiuto sarebbe molto apprezzato. Grazie!

+0

È {bar} = cagingIt.foo; insufficiente? –

+0

@RobFoley è sicuramente un buon modo per farlo, ma era più curioso di sapere se la sintassi supportasse la destrutturazione di proprietà profondamente annidate. – Dom

+1

Sei sicuro che ti piaccia Nicholas Cage. – Esteban

risposta

20

C'è un modo per gestire gli oggetti nidificati e gli array che usano questa sintassi. Dato il problema sopra descritto, una soluzione potrebbe essere il seguente:

let cagingIt = { 
     foo: { 
     bar: 'Nick Cage' 
     } 
    }; 
let { foo: {bar: name} } = cagingIt; 

console.log(name); // "Nick Cage" 

In questo esempio, foo si riferisce al nome proprietà "foo". Seguendo il colon, usiamo quindi bar che si riferisce alla proprietà "bar". Infine, name funge da variabile che memorizza il valore.

Per quanto riguarda la gamma destrutturazione, si dovrebbe gestire la cosa in questo modo:

let cagingIt = { 
     foo: { 
     bar: 'Nick Cage', 
     counts: [1, 2, 3] 
     } 
    }; 

let { foo: {counts: [ ct1, ct2, ct3 ]} } = cagingIt; 
console.log(ct2); // prints 2 

segue lo stesso concetto come l'oggetto, appena si è in grado di utilizzare array di destrutturazione e conservare quei valori pure.

Spero che questo aiuti!

+1

Neat, ho dato un pugno al Babel repl per un po ', ma non ho provato quella sintassi. –

+1

Un esempio di qualcosa di simile è in https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment#Nested_object_and_array_destructuring – juvian

+1

Diventa davvero pazzo quando si utilizzano nomi di proprietà calcolate insieme a profonde destrutturazioni. –

Problemi correlati