2015-02-25 13 views
6

Sto cercando di impostare un elemento di un array come un oggetto ProprietàImpostazione di un elemento di matrice come un oggetto Proprietà

esempio semplificato:

var array = ['a', 'b', 'c']; 
var obj = { array[1]: 'good' } 

Sopra causa un errore.

Aggiornamento: Infatti, sto passando l'oggetto come parte di un altro array cioè un esempio semplificato sarebbe:

aObj[value] = ['one', {array[1]: 'good'}, 'two', 'three', 'four']; 

Impostazione dello stile obj[array[1]] = 'good'; significherebbe utilizzando

aObj[value][1][array[1]] = 'good'; 
+1

"* Naturalmente posso dichiarare l'elemento array come variabile *". No, non puoi, a meno che non usi nomi di proprietà calcolati, introdotti da ECMAScript 6. Il tuo secondo codice produrrà la chiave '" arr "', non '" b "'. – Oriol

+0

@Oriol .. Hai ragione ... grazie ... Ho aggiornato e corretto il mio post :) – erosman

+0

Bontà, quella struttura dati è molto confusionaria –

risposta

5

{ array[1]: 'good' } genera un errore perché, quando si utilizza la notazione letterale dell'oggetto in JavaScript, viene trattata la stringa prima dello : in quanto l'identificatore e un nome identificativo valido non possono avere [ o ] in esso.

Quindi, utilizzare il [] notazione, che permette qualsiasi stringa da utilizzare come il nome della proprietà, come questo

var array = ['a', 'b', 'c']; 
var obj = {}; 
obj[array[1]] = 'good'; 
+1

Inoltre non può essere una variabile prima che il ':' – mplungjan

+0

Sembra in ES6 tu può avere un'espressione prima di ':' come detto da @dfsq – mplungjan

+1

Grazie a tutti! Poiché la mia domanda era un duplicato [qui] (http://stackoverflow.com/questions/29001580/object-literal-unexpected-token), ho aggiunto 'GAME ['MYGAMEIDHERE'] = Monsters;', e nidifica perfettamente ! –

3

Forse è il momento di iniziare a dare ES6 risponde troppo. In ECMAScript6 è possibile utilizzare espressioni come chiavi oggetto:

var array = ['a', 'b', 'c']; 
var obj = { 
    [array[1]]: 'good' 
} 

In realtà, questa sintassi è già supportato in Firefox.

Attualmente l'unico modo per utilizzare la variabile è utilizzare la notazione delle parentesi come descritto in un'altra risposta.

+0

Grazie dfsq. Ho aggiornato il mio post con maggiori informazioni. In realtà sto codificando script per Firefox, tuttavia, per essere più compatibile, rimango con ES5 per ora. ;) Buono a sapersi per quando sto codificando un addon di Firefox. – erosman

+0

Quindi sono parzialmente corretto :) – mplungjan

+0

In ES5, è possibile eseguire: 'Object.defineProperty ({}, array [1], {value: 'good', enumerable: true})'. Questo potrebbe non essere considerato un miglioramento. – rici

Problemi correlati