如何从变量设置JS对象属性名称

Vin*_*abu 163 javascript

我需要动态设置JS对象属性名称.

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

    data = {
        key : 'name1',
    }
}
Run Code Online (Sandbox Code Playgroud)

结果应该是:

data = {
    1name: 'name1'
    2name: 'name1'
}
Run Code Online (Sandbox Code Playgroud)

clo*_*ure 178

var jsonVariable = {};
for(var i=1; i < 3; i++) {
  jsonVariable[i + 'name'] = 'name' + i;        
}
Run Code Online (Sandbox Code Playgroud)

  • Musa在下面的回答也正确地表明,使用[]符号实际上是唯一的方法. (4认同)

Mus*_*usa 147

您必须使用[]表示法动态设置密钥.

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

}
Run Code Online (Sandbox Code Playgroud)

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

var key  = i + 'name';
data = {
    [key] : 'name1',
}
Run Code Online (Sandbox Code Playgroud)

  • jsonVariable = {}; 不应该在for循环中初始化. (2认同)

chi*_*NUT 118

使用ECMAScript 6,您可以将变量属性名称与对象文字语法一起使用,如下所示:

var keyName = 'myKey';
var obj = {
              [keyName]: 1
          };
obj.myKey;//1
Run Code Online (Sandbox Code Playgroud)

以下较新的浏览器中提供了此语法:

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

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

您可以使用诸如babel之类转换器为旧版浏览器添加支持.如果使用模块捆绑器(如汇总webpack),则很容易转换整个项目.

  • 感谢您添加了令人敬畏的ES6语法 (2认同)

tim*_*imc 22

这是动态设置值的方法

var jsonVariable = {};
for (var i = 1; i < 3; i++) {
    var jsonKey = i + 'name';
    jsonVariable[jsonKey] = 'name' + i;
}
Run Code Online (Sandbox Code Playgroud)


Bor*_*try 11

Use a variable as an object key

let key = 'myKey';

let data = {[key] : 'name1'; }
Run Code Online (Sandbox Code Playgroud)

See How to iterete on your object here


小智 7

变量来自何处并不重要.主要的是我们有一个...在方括号"[..]"之间设置变量名称.

var optionName = 'nameA';
var JsonVar = {
[optionName] : 'some value'
}
Run Code Online (Sandbox Code Playgroud)