考虑:

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

我该怎么做:

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

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

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

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


当前回答

ES6

const [first] = Object.keys(obj)

其他回答

只是为了好玩,这在JS 1.8.5中是有效的

var obj = {a: 1, b: 2, c: 3};
Object.keys(obj)[0]; // "a"

这和你看到的顺序是一样的

for (o in obj) { ... }

它们并不是有序的,但是你可以这样做:

var first;
for (var i in obj) {
    if (obj.hasOwnProperty(i) && typeof(i) !== 'function') {
        first = obj[i];
        break;
    }
}

. hasownproperty()对于忽略原型对象很重要。

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

_.pairs(obj)[0]

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

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

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.

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

对于对象的第一个键,您可以使用

console.log(Object.keys(object)[0]);//print key's name

价值

console.log(object[Object.keys(object)[0]]);//print key's value