【问题标题】:Using Variable for Property Name of Object - Javascript [duplicate]使用变量作为对象的属性名称 - Javascript [重复]
【发布时间】:2013-06-19 16:52:42
【问题描述】:

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

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


    【解决方案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】:
      var x = {}
      x[first] = value
      objArr[key] = x
      

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

      (为什么要将代码包装在 jQuery 调用中?而且您确实应该使用 var 声明。)

      【讨论】:

      • 我没有使用那些全局变量,只是在将这个例子放在一起解决这个特定问题时。 jquery 是不必要的。感谢您的回复。
      猜你喜欢
      • 2010-10-16
      • 2012-06-18
      • 2011-05-14
      • 2011-03-10
      • 1970-01-01
      相关资源
      最近更新 更多