【问题标题】:Why is this return hash giving me issues? [duplicate]为什么这个返回哈希会给我带来问题? [复制]
【发布时间】:2012-11-01 22:10:59
【问题描述】:

可能重复:
Using a variable for a Javascript object key

我不知道我是怎么搞砸的。

我的代码给了我错误:

invalid property id

代码:

 return  { this.Obj.itemid :
               {  Color : this.Obj.color,
                  Name : this.Obj.name,
                  Year : this.Obj.year
                }
           };

我需要将这些哈希作为数组返回(因此返回),但无论我做什么,它要么返回上面的错误,要么 var 引用被字符串化。我实际上无法将其中的动态 js 值作为键。

我试过这个:

" + this.Obj.itemid + "

还有这个:

var itemid = this.Obj.itemid;
return { itemid : {
         //etc..
    }}

有什么想法吗?

【问题讨论】:

  • this 和 this.Obj 等都很棒,因为右手分配是正确的。我得到了除 var 之外的所有正确值:this.Obj.itemid 在左侧时总是被字符串化 - 或用作键。我会查看您的链接; = 谢谢。

标签: javascript arrays key


【解决方案1】:

问题是你不能那样使用this.Obj.itemid

请尝试以下方法:

var ret={};
ret[this.Obj.itemid]=
   {
      Color : this.Obj.color,
      Name : this.Obj.name,
      Year : this.Obj.year
   };
return ret;

【讨论】:

  • 哇。这非常有效。谢谢一堆。真正的帮助。
  • 我做到了——很奇怪。我只是在想-为什么那个复选标记不是绿色的。唔。好奇的。我肯定检查过了。无论如何,再次检查它:-)
【解决方案2】:

属性初始值设定项中冒号左侧出现的内容必须是有效的标识符、字符串字面量或数字字面量。它总是按字面意思使用。 this.Obj.itemid 不是这些东西。

如果您尝试使用this.Obj.itemid 作为属性名称,那么:

var ret = {};
ret[this.Obj.itemid] = {
    Color : this.Obj.color,
    Name : this.Obj.name,
    Year : this.Obj.year
};

这利用了这样一个事实,即您可以将括号表示法与属性名称的任何表达式一起使用。 ret[this.Obj.itemid] = ... 将在 ret 上创建一个属性,其名称是表达式 this.Obj.itemid 的结果。

更简单的例子:

var foo = {};
var b = "bar";
foo[b] = 42;
console.log(foo.bar); // "42"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 2013-07-11
    • 2017-02-11
    • 2020-07-18
    • 2013-12-01
    • 2015-06-10
    相关资源
    最近更新 更多