2016-06-22 36 views
3

Ich habe ein Objekt:Javascript Objektschlüssel als Variable

let object1 = { a: 'one', b: 'two', c: 'three' }; 

Ich versuche object1.a zu setzen ein Schlüssel für object2 sein:

object2 = { key: 'something' }; 

I Schlüssel zu machen versucht, wie:

Ich erinnere mich, ich muss Bracket-Notation verwenden, aber kann nicht herausfinden, wie das geht?

Der Grund, warum ich dies tun möchte, ist, weil ich die Werte von object1 abhängig von Requisiten ändern werde, so dass ich nur eine einzige Komponente haben kann, die den Schlüssel basierend auf Requisite ändert.

+2

http://stackoverflow.com/questions/4244896/dynamical-access-object-property-using-variable – Teemu

+1

'object1.a = object2'? –

+0

object1 ['a'] = ""; du kannst es so verwenden – Oshadha

Antwort

9

Wenn object2 bereits vorhanden ist, die Sie gerade Klammern Notation:

object2[object1.a] = 'something'; 

Nun object2 eine Eigenschaft hat one genannt, die den Wert 'something' hat.

Wenn Sie object2 zu schaffen, in ES5 müssen Sie separat zuerst das Objekt erstellen und dann die Eigenschaft hinzu:

var object2 = {}; 
object2[object1.a] = 'something'; 

In ES2015 ("ES6"), können Sie eine verwenden Eigenschaftsname in der Initialisierungsliste berechnet (man beachte die []):

// ES2015 only! 
let object2 = { 
    [object1.a]: 'something' 
}; 

Genau wie bei Dirac-Notation, wenn Sie Zuordnung tun, Sie jeden Ausdruck innerhalb dieser br haben ackets im Initialisierer.

Beachten Sie, dass dies nicht schafft fortlaufende Verbindung zwischen den Objekten. Es wertet den Wert object1.a zum Zeitpunkt der Verarbeitung des Initialisierers rein aus und verwendet den resultierenden Wert als Namen der neuen Eigenschaft für das neue Objekt.

+0

Danke, das funktioniert :) Ich wusste nicht, dass Sie die Punktnotation innerhalb der Klammernnotation verwenden können. – cocacrave

+1

@cocacrave - Sie können jeden Ausdruck innerhalb der eckigen Klammern setzen, z. B. ist es ziemlich legal etwas wie 'object2 [Bedingung? "test": callFunc() + object1.a + "ein anderer String"] '. – nnnnnn

+0

Danke für die // ES2015 nur! Tipp :) – Vetterjack

Verwandte Themen