210

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

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

    data = {
        key : 'name1',
    }
}

结果应该是:

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

8 回答 8

208
var jsonVariable = {};
for(var i=1; i < 3; i++) {
  jsonVariable[i + 'name'] = 'name' + i;        
}
于 2012-12-12T05:14:33.937 回答
207

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

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

}

现在在 ES6 中,您可以使用对象字面量语法来动态创建对象键,只需将变量包装在[]

var key  = i + 'name';
data = {
    [key] : 'name1',
}
于 2012-12-12T05:14:34.700 回答
146

使用 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之类的编译器来添加对旧浏览器的支持。如果您使用诸如rollupwebpack 之类的模块捆绑器,则很容易转译整个项目。

于 2015-06-18T23:29:27.370 回答
36

使用变量作为对象键

let key = 'myKey';

let data = {[key] : 'name1'; }

在此处查看如何迭代您的对象

于 2019-05-02T14:18:35.213 回答
22

这是动态设置值的方法

var jsonVariable = {};
for (var i = 1; i < 3; i++) {
    var jsonKey = i + 'name';
    jsonVariable[jsonKey] = 'name' + i;
}
于 2012-12-12T05:14:26.910 回答
7

变量来自哪里并不重要。我们有一个主要的东西......在方括号“[..]”之间设置变量名。

var optionName = 'nameA';
var JsonVar = {
[optionName] : 'some value'
}
于 2015-10-01T07:56:24.427 回答
1
jsonVariable = {}
for(i=1; i<3; i++) {        
   var jsonKey  = i+'name';
   jsonVariable[jsonKey] = 'name1'
}

这将类似于

    jsonVariable = {
    1name : 'name1'
    2name : 'name1'
}
于 2012-12-12T05:18:27.347 回答
0

根据上面 Sainath SR 的评论,我可以通过定义对象然后在对象之外定义另一个键/值来从 Google Apps 脚本(尚不支持 ES6)中的变量设置 js 对象属性名称:

var salesperson = ...

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

mailchimpInterests[salesperson] = true;
于 2019-06-14T12:33:02.067 回答