考虑:

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]]

其他回答

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

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.

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

如果对象的顺序很重要,你应该修改JSON模式以将对象存储在数组中:

[
    {"name":"foo", ...},
    {"name":"bar", ...},
    {"name":"baz", ...}
]

或者:

[
    ["foo", {}],
    ["bar", {}],
    ["baz", {}]
]

正如Ben Alpert所指出的,Javascript对象的属性是无序的,如果你期望它们按照在对象文字中指定的顺序枚举——没有“first”属性,那么你的代码就会被破坏。

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) { ... }

获取对象的第一个键

const myObject = {
   'foo1': { name: 'myNam1' },
   'foo2': { name: 'myNam2' }
}

const result = Object.keys(myObject)[0];

// result will return 'foo1'