【问题标题】:Accessing object in array using string使用字符串访问数组中的对象
【发布时间】:2014-03-02 00:10:07
【问题描述】:

我有这个代码:

    var dictionary=[
            apple={name:"apple",pos:"noun",d:"",c:["fruit"]},
            banana={name:"banana",pos:"noun",d:"",c:["fruit"]}
    ];

我怎样才能通过使用其名称的字符串来访问数组中的一个对象。以您可以访问对象的方式

     object['propertyName']

有没有办法用数组做类似的事情?我想以类似的方式访问它

    dictionary["apple"].pos 
    //Want to return "noun"

有没有一种简单的方法可以用数组做类似的事情,如果没有,我可以使用其他方法吗?

【问题讨论】:

  • 您的数组语法不正确。在此处检查您的代码jshint.com
  • 哪部分不正确?我没有看到任何错误。
  • 好吧,我把代码放在 JSHint 中,上面写着“两个未定义的变量,applebanana”,这不是你想要的。

标签: javascript arrays object properties


【解决方案1】:

您生成dictionary 的方式是错误的;它在语法上是有效的,但几乎可以肯定不是你打算做的。它没有将键 apple 绑定到该对象。相反,它定义了一个名为 apple 的隐式(全局)变量并将对象以及数组的第一个元素分配给该变量。

试试这个:

var dictionary= {
    apple: {name:"apple",pos:"noun",d:"",c:["fruit"]},
    banana: {name:"banana",pos:"noun",d:"",c:["fruit"]}
};

console.log(dictionary["apple"].pos); // "noun"

// This also works:
console.log(dictionary.apple.pos);    // "noun"

【讨论】:

  • 您可能还想在帖子中指出他不需要多余的“名称”属性,他还可以使用点语法而不是 dict 样式dictionary.apple.pos(如果他愿意的话)。
  • @Jay 好点。 OP似乎对JS有点陌生,所以他/她可能不熟悉那个语法。
  • 我使用字符串的原因是因为我在单击提交按钮时通过用户输入框获取属性,所以点语法在上下文中不起作用我需要。
  • @zchbrntmr:是的,这就是你必须使用括号语法的原因。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 2019-09-18
  • 1970-01-01
相关资源
最近更新 更多