考虑:
var object = {
foo: {},
bar: {},
baz: {}
}
我将如何做到这一点:
var first = object[0];
console.log(first);
显然,这不起作用,因为第一个索引名为foo
,而不是0
。
console.log(object['foo']);
有效,但我不知道它的名字是 foo。它可以命名为任何东西。我只想要第一个。
考虑:
var object = {
foo: {},
bar: {},
baz: {}
}
我将如何做到这一点:
var first = object[0];
console.log(first);
显然,这不起作用,因为第一个索引名为foo
,而不是0
。
console.log(object['foo']);
有效,但我不知道它的名字是 foo。它可以命名为任何东西。我只想要第一个。
只是为了好玩,这适用于 JS 1.8.5
var obj = {a: 1, b: 2, c: 3};
Object.keys(obj)[0]; // "a"
这与您看到的相同顺序匹配
for (o in obj) { ... }
如果你想要一些简洁的尝试:
for (first in obj) break;
alert(first);
包装成一个函数:
function first(obj) {
for (var a in obj) return a;
}
它们并不是真正订购的,但您可以这样做:
var first;
for (var i in obj) {
if (obj.hasOwnProperty(i) && typeof(i) !== 'function') {
first = obj[i];
break;
}
}
在.hasOwnProperty()
忽略原型的对象是很重要的。
这不会给你第一个,因为 javascript 对象是无序的,但是在某些情况下这很好。
myObject[Object.keys(myObject)[0]]
如果对象的顺序很重要,您应该修改 JSON 模式以将对象存储在数组中:
[
{"name":"foo", ...},
{"name":"bar", ...},
{"name":"baz", ...}
]
或许:
[
["foo", {}],
["bar", {}],
["baz", {}]
]
正如 Ben Alpert 指出的那样,Javascript 对象的属性是无序的,如果您希望它们按照在对象字面量中指定的相同顺序进行枚举,那么您的代码就会被破坏——没有“第一个”属性。