2016-06-22 154 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