2012-05-17 18 views
31

Sto cercando di creare un oggetto di dizionario in questo modochiave per javascript dizionario non è memorizzato come valore, ma come nome di variabile

var obj = { varName : varValue }; 

Quello che mi aspetto è che se varName='foo', l'obj dovrebbe essere {'foo', 'some value' } tuttavia ciò che Vedo è {varName, 'some value'} il valore della variabile non viene utilizzato ma un nome di variabile come chiave. Come faccio a fare in modo che il valore variabile sia usato come chiave?

+0

possibile duplicato di [Come usare una variabile come una chiave all'interno oggetto initialiser] (http://stackoverflow.com/questions/ 10631007/how-to-use-a-variable-as-a-key-inside-object-initialiser) – zzzzBov

risposta

63

Prova in questo modo:

var obj = {}; 
obj[varName] = varValue; 

Non è possibile inizializzare gli oggetti con tasti 'dinamici' nel vecchio Javascript. var obj = { varName : varValue }; è equivalente a var obj = { "varName" : varValue };. Questo è il modo in cui interpreta Javascript.

Tuttavia nuovo ECMAScript supporta computed property names, e si può fare:

var obj = { [varName]: varValue }; 
+4

Questo funziona! Grazie. Anche se sono ancora curioso perché l'altro modo non funziona. –

+2

Perché generalmente quando costruisci oggetti con un set fisso di chiavi (che è ciò che sta facendo la sintassi '{}') sai quali sono quelle chiavi. L'alternativa richiederebbe a tutti coloro che vogliono che le chiavi fisse inseriscano virgolette, il che sarebbe più lavoro per più persone più del tempo. – Dan

+0

Si potrebbe anche vedere questa domanda Ho appena risposto: http://stackoverflow.com/questions/10631007/how-to-use-a-variable-as-a-key-inside-object-initialiser – HBP

17

Partendo ECMAScript 2015, che ha ottenuto un migliore supporto del browser nel corso dell'ultimo anno (s), è possibile utilizzare la notazione indice variabile:

var obj = { [varName] : varValue }; 

Questo è sintatticamente uguale

var obj = {}; 
obj[varName] = varValue; 

È inoltre possibile utilizzare espressioni o simboli come chiave di proprietà:

var contact = { 
    company: companyName, 
}; 
var companiesWithContacts = { 
    [contact.company.toLowerCase()]: true 
}; 
var myList = { 
    [Symbol.iterator]: createIteratorForList 
}; 
function createIteratorForList() { ... } 
Problemi correlati