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

时间:2013-06-22 18:48:30

标签: javascript jquery object properties variable-variables

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

请考虑以下事项:(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”..所以相反,结果将是:

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

(linkto:jsfiddle

2 个答案:

答案 0 :(得分:7)

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

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

对不起,它更详细:(

编辑;

在ES6中,您现在可以使用computed-property-names;

const key = 'name';
const value = 'james';

const obj = {
  [key]: value
};

答案 1 :(得分:2)

var x = {}
x[first] = value
objArr[key] = x

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

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