我需要动态设置一个JS对象属性名。

for(i=1; i<3; i++) {
    var key  = i+'name';

    data = {
        key : 'name1',
    }
}

结果应该是:

data = {
    1name: 'name1'
    2name: 'name1'
}

当前回答

沿着上面Sainath S.R的评论,我能够从谷歌Apps Script(还不支持ES6)的变量中设置一个js对象属性名,通过定义对象,然后在对象之外定义另一个键/值:

var salesperson = ...

var mailchimpInterests = { 
        "aGroupId": true,
    };

mailchimpInterests[salesperson] = true;

其他回答

变量来自哪里并不重要。最重要的是我们有一个… 在方括号中设置变量名“[..]”)”。

var optionName = 'nameA';
var JsonVar = {
[optionName] : 'some value'
}

您必须使用[]符号来动态地设置键。

var jsonVariable = {};
for(i=1; i<3; i++) {        
 var jsonKey  = i+'name';
 jsonVariable[jsonKey] = 'name1';

}

现在在ES6中,你可以使用对象文字语法动态地创建对象键,只需将变量包装在[]中即可。

var key  = i + 'name';
data = {
    [key] : 'name1',
}
jsonVariable = {}
for(i=1; i<3; i++) {        
   var jsonKey  = i+'name';
   jsonVariable[jsonKey] = 'name1'
}

这和

    jsonVariable = {
    1name : 'name1'
    2name : 'name1'
}

在ECMAScript 6中,你可以使用带有对象文字语法的变量属性名,就像这样:

var keyName = 'myKey';
var obj = {
              [keyName]: 1
          };
obj.myKey;//1

该语法在以下较新的浏览器中可用:

Edge 12+(不支持IE), FF34+, Chrome 44+, Opera 31+, Safari 7.1+

(https://kangax.github.io/compat-table/es6/)

您可以通过使用babel等转译器为旧浏览器添加支持。如果使用rollup或webpack等模块捆绑器,则很容易编译整个项目。

var jsonVariable = {};
for(var i=1; i < 3; i++) {
  jsonVariable[i + 'name'] = 'name' + i;        
}