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

Using Variable for Property Name of Object - Javascript [duplicate]

提问人:Fezzik 提问时间:6/23/2013 更新时间:3/3/2019 访问量:7369

问:

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

请考虑以下几点:(链接: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

(链接:jsfiddle)

JavaScript jQuery 对象 属性 变量变量

评论


答:

10赞 Jivings 6/23/2013 #1

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

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
};
2赞 user2357112 6/23/2013 #2
var x = {}
x[first] = value
objArr[key] = x

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

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

评论

0赞 Fezzik 6/24/2013
我没有使用那些全局变量,只是在为这个特定问题将这个示例放在一起时。jquery 是非必需的。感谢您的回复。