考虑:

var object = {
  foo: {},
  bar: {},
  baz: {}
}

我该怎么做:

var first = object[0];
console.log(first);

显然,这行不通,因为第一个索引名为foo, 不是0。

console.log(object['foo']);

工作,但我不知道它叫foo。它可以被命名为任何东西。我只想要第一个。


当前回答

没有办法获得第一个元素,因为JavaScript中的“散列”(对象)具有无序属性。最好的方法是将键存储在数组中:

var keys = ["foo", "bar", "baz"];

然后使用它来获得正确的值:

object[keys[0]]

其他回答

我的解决方案:

Object.prototype.__index = function(index)
{
    var i = -1;
    for (var key in this)
    {
        if (this.hasOwnProperty(key) && typeof(this[key])!=='function')
            ++i;
        if (i >= index)
            return this[key];
    }
    return null;
}
aObj = {'jack':3, 'peter':4, '5':'col', 'kk':function(){alert('hell');}, 'till':'ding'};
alert(aObj.__index(4));

使用下划线时,可以使用_。将第一个对象条目作为键值对,如下所示:

_.pairs(obj)[0]

然后该键可以使用[0]下标,值为[1]

没有办法获得第一个元素,因为JavaScript中的“散列”(对象)具有无序属性。最好的方法是将键存储在数组中:

var keys = ["foo", "bar", "baz"];

然后使用它来获得正确的值:

object[keys[0]]

如果你想要简洁的东西,试试:

for (first in obj) break;

alert(first);

包装成函数:

function first(obj) {
    for (var a in obj) return a;
}

我昨天也遇到了同样的问题。我是这样解决的:

var obj = {
        foo:{},
        bar:{},
        baz:{}
    },
   first = null,
   key = null;
for (var key in obj) {
    first = obj[key];
    if(typeof(first) !== 'function') {
        break;
    }
}
// first is the first enumerated property, and key it's corresponding key.

不是最优雅的解决方案,而且我非常确定它在不同的浏览器中可能会产生不同的结果(例如,规范说枚举不需要按照定义的顺序枚举属性)。但是,我的对象中只有一个属性,所以这不是问题。我只需要第一把钥匙。