提问人:Fezzik 提问时间:6/23/2013 更新时间:3/3/2019 访问量:7369
使用变量作为对象的属性名称 - Javascript [duplicate]
Using Variable for Property Name of Object - Javascript [duplicate]
问:
看到了一些与此相关的答案,但没有一个回答了这个版本的主题。
请考虑以下几点:(链接: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)
答:
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 是非必需的。感谢您的回复。
评论