2016-06-22 207 views
3

我有一個對象:Javascript對象鍵爲變量

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

我正在嘗試設置object1.a成爲對象2的一個關鍵:

object2 = { key: 'something' }; 

我試圖使鍵:

[object1].a 

object1.a 

object1[a] 

我記得我必須使用括號表示法,但不知道如何做到這一點?

我想這樣做的原因是因爲我要根據道具來更改object1的值,所以我可以讓一個組件根據收到的道具更改密鑰。

+2

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

+1

'object1.a = object2'? –

+0

object1 ['a'] =「」;你可以像這樣使用 – Oshadha

回答

9

如果object2已經存在,你只需要使用括號表示法:

object2[object1.a] = 'something'; 

現在,object2有一個名爲one具有價值'something'屬性。

如果你在ES5創建對象2,你必須先分別創建對象,然後添加屬性:

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

在ES2015(「ES6」),你可以使用一個在初始化計算屬性名稱(注意[]):

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

正如當你做任務括號標記,可以將這些BR內有任何表情在初始化器中進行初始化。

請注意,這不是而是在對象之間創建正在進行的鏈接。它在處理初始化程序時純粹評估object1.a的值,並將結果值用作新對象上新屬性的名稱。

+0

謝謝,這個工作:)我不知道你可以在括號內使用點符號。 – cocacrave

+1

@cocacrave - 你可以在方括號內放置任何表達式,例如,像'object2 [condition? 「test」:callFunc()+ object1.a +「another string」]'。 – nnnnnn

+0

感謝// ES2015!小費 :) – Vetterjack