在没有键的情况下引用JS对象成员

时间:2009-08-25 04:10:22

标签: javascript syntax object

var foo = {“bar”:{“blah”:9}};

如果我不知道密钥是“bar”,有没有办法获得foo唯一成员的[“blah”]值?

我可以以某种方式引用对象的第一个成员而不知道它的键吗? 我正在寻找相当于 foo [0] [“blah”]如果foo是普通数组。

在我的情况下,我实际上无法迭代foo来获取密钥。

这是清楚的吗?

5 个答案:

答案 0 :(得分:6)

据我所知,使用Javascript Object(在字面意义上,类型为`Object的对象),唯一的方法是:

for(var i in foo) {
    var value = foo[i].blah;
    break;   
}

现在value将包含bar对象中foo对象的第一个可枚举属性的值。当然,您可以将其抽象为函数。我打算写一个例子,但是CMS has a fantastic one in his answer here.

答案 1 :(得分:2)

编辑:同意@kangax,制作正常功能更安全,不会污染原生的Object.prototype,这会导致意外行为:

function firstMember (obj) {
  for(var i in obj) 
      if (obj.hasOwnProperty(i)){ // exclude properties from the prototype
          return obj[i];
      }
}


firstMember(foo)['blah']; // 9

答案 2 :(得分:1)

Javascript中的对象是名称/值对的无序集合,因此实际上没有访问对象的第一个或最后一个属性。找到某个键​​值的唯一方法是迭代一个对象(带有for-in)。您可以在第一次迭代时停止,但未指定顺序,因此两个不同的实现可以在第一次迭代时返回两个不同的键。

答案 3 :(得分:0)

我担心你试图做的事情是不可能的。对象本质上是散列映射,因此存储属性的顺序应该出现在对象内存中的随机位置(并且散列函数越好,位置越随机)。

如果您单步执行遍历对象所有属性的循环,则可以自己查看。由于结构的随机性,没有设置顺序可以迭代。

也许您可以将值存储在对象和数组中?

答案 4 :(得分:0)

看看这里:

http://dean.edwards.name/weblog/2006/07/enum/

如何在不知道其结构的情况下迭代对象。