使用变量作为对象的属性名称 – Javascript

看到了与此相关的一些答案,但没有人回答这个问题的主题版本。

请考虑以下事项:(linkto: jsfiddle )

$(function(){ arrKeys = []; objArr = []; nameArr = ['name1','name2','name3','name4']; descArr = ['desc1','desc2','desc3','desc4']; allValues = {name: nameArr, desc: descArr}; arrKeys[0] = 'name'; arrKeys[1] = 'desc'; first = arrKeys.shift(); // returns 'name' $(allValues[first]).each(function (key,value) { console.log(first); //returns 'name' objArr[key] = {first:value}; //the problem }); console.log(objArr); }); 

使用console.log(objArr)生成以下对象数组,如下所示:

[对象,对象,对象] 0:对象优先 :“name1”1:对象优先 :“name2”2:对象优先 :“name3”3:对象优先 :“name4”长度:4

问题是我希望属性“first”成为var first的值(这是“name”..所以相反,结果将是:

[对象,对象,对象] 0:对象 :“name1”1:对象 :“name2”2:对象 :“name3”3:对象 :“name4”长度:4

(linkto: jsfiddle )

要将变量设置为键名,必须使用括号表示法;

 console.log(first); // returns 'name' var obj = {}; obj[first] = value; objArr[key] = obj; // no longer a problem 

对不起它更详细:(

编辑;

在ES6中,您现在可以使用括号内联;

 const key = 'name'; const value = 'james'; const obj = { [key]: value }; 
 var x = {} x[first] = value objArr[key] = x 

Javascript对象文字语法将不带引号的键视为引用字符串而不是变量名称。 您必须使用括号语法来设置在运行时计算名称的属性。

(为什么要在jQuery调用中包装代码?你真的应该使用var声明。)