我需要动态设置一个JS对象属性名。
for(i=1; i<3; i++) {
var key = i+'name';
data = {
key : 'name1',
}
}
结果应该是:
data = {
1name: 'name1'
2name: 'name1'
}
我需要动态设置一个JS对象属性名。
for(i=1; i<3; i++) {
var key = i+'name';
data = {
key : 'name1',
}
}
结果应该是:
data = {
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等模块捆绑器,则很容易编译整个项目。
其他回答
沿着上面Sainath S.R的评论,我能够从谷歌Apps Script(还不支持ES6)的变量中设置一个js对象属性名,通过定义对象,然后在对象之外定义另一个键/值:
var salesperson = ...
var mailchimpInterests = {
"aGroupId": true,
};
mailchimpInterests[salesperson] = true;
jsonVariable = {}
for(i=1; i<3; i++) {
var jsonKey = i+'name';
jsonVariable[jsonKey] = 'name1'
}
这和
jsonVariable = {
1name : 'name1'
2name : 'name1'
}
var jsonVariable = {};
for(var i=1; i < 3; i++) {
jsonVariable[i + 'name'] = 'name' + i;
}
使用变量作为对象键
let key = 'myKey';
let data = {[key] : '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等模块捆绑器,则很容易编译整个项目。