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

IT技术 javascript
2021-02-09 13:24:47

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

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

    data = {
        key : 'name1',
    }
}

结果应该是:

data = {
    1name: 'name1'
    2name: 'name1'
}
6个回答
var jsonVariable = {};
for(var i=1; i < 3; i++) {
  jsonVariable[i + 'name'] = 'name' + i;        
}
实际上,使用新语法,OP 试图实现的目标只有在循环限制是硬编码且很小的情况下才有可能实现。
2021-03-20 13:24:47
另请注意,@ChilNut 下面的回复现在描述了使用 ES6 执行此操作的最简单方法
2021-03-21 13:24:47
下面穆萨的回应也正确地阐明了使用 [] 表示法实际上是唯一的方法。
2021-04-02 13:24:47

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

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

}

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

var key  = i + 'name';
data = {
    [key] : 'name1',
}
你也在这里让 jsonVariable 成为全球性的
2021-03-18 13:24:47
jsonVariable = {}; 不应在 for 循环内初始化。
2021-03-20 13:24:47

使用 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 之类的module打包器,则很容易转译整个项目

没有 ES6 我不能定义 var payload={dynamicKey:val} ,我需要做 var payload={} 和 payload[variableName]=val。
2021-03-20 13:24:47
感谢您添加很棒的 ES6 语法
2021-03-25 13:24:47

使用变量作为对象键

let key = 'myKey';

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

请参阅如何在此处迭代您的对象

您能否详细说明一下,让其他人知道为什么这可能是一个解决方案?
2021-03-14 13:24:47
您添加的信息很好,只是永远不要只用代码给出答案;)
2021-03-23 13:24:47

这是动态设置值的方式

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