2

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

考虑以下内容:(链接到: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

4

2 回答 2

8

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

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
};
于 2013-06-22T18:53:29.783 回答
2
var x = {}
x[first] = value
objArr[key] = x

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

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

于 2013-06-22T18:56:48.997 回答