2015-06-22 13 views
5

Questo è meglio spiegato con l'esempio. Le seguenti opere in ES6 per creare un oggetto che consiste di alcune delle chiavi di un oggetto esistente:Creare un oggetto sottoinsieme, costituito solo da alcune delle proprietà di un oggetto esistente

var o = {a:1, b: 2, c: 3} 
var {a, c} = o 
var subsetObj = {a, c} // will be: {a:1, c:3} 

Ci sono due aspetti negativi qui:

  1. ci sono voluti due statments, e due linee, per creare l'oggetto sottoinsieme desiderato
  2. Abbiamo dovuto inquinare l'ambito della variabile locale creando le variabili intermedie a e c, che non sono necessarie localmente, tranne che come mezzo per creare il nostro oggetto sottoinsieme.

C'è un modo per ottenere lo stesso risultato in una singola istruzione, senza introdurre la gente del posto non necessari a e c?

+0

Perché questo bisogno di una sintassi speciale? Perché non usare lodash o qualcosa del genere, ad es. 'var o = {a: 1, b: 2, c: 3}; _.pick (o, ['a', 'c']) ' – loganfsmyth

+0

Non * necessita * di esso, sarebbe semplicemente carino. Creerei solo una funzione di aiuto, piuttosto che portare tutto di lodash, se mi trovassi a doverne tanto bisogno. Questa domanda riguardava specificamente il supporto della sintassi nativa - il problema in sé è ovviamente banale da risolvere. – Jonah

+1

In totale, volevo solo menzionarlo. – loganfsmyth

risposta

3

Non esiste una sintassi specifica per questo. È possibile continuare a fare:

var subsetObj = {a: o.a, c: o.c}; 

Se si dispone di più proprietà o un numero variabile di proprietà, creare una funzione di supporto.

correlati: Is it possible to destructure onto an existing object? (Javascript ES6)

+0

Avevo paura di questo. In questo esempio va bene, ma diventa prolisso quando si sostituiscono 'a' e' c' con nomi di variabili lunghi. – Jonah

Problemi correlati