考虑:
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。它可以被命名为任何东西。我只想要第一个。
当前回答
获取对象的第一个键
const myObject = {
'foo1': { name: 'myNam1' },
'foo2': { name: 'myNam2' }
}
const result = Object.keys(myObject)[0];
// result will return 'foo1'
其他回答
它们并不是有序的,但是你可以这样做:
var first;
for (var i in obj) {
if (obj.hasOwnProperty(i) && typeof(i) !== 'function') {
first = obj[i];
break;
}
}
. hasownproperty()对于忽略原型对象很重要。
ES6
const [first] = Object.keys(obj)
没有办法获得第一个元素,因为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.
不是最优雅的解决方案,而且我非常确定它在不同的浏览器中可能会产生不同的结果(例如,规范说枚举不需要按照定义的顺序枚举属性)。但是,我的对象中只有一个属性,所以这不是问题。我只需要第一把钥匙。
获取对象的第一个键
const myObject = {
'foo1': { name: 'myNam1' },
'foo2': { name: 'myNam2' }
}
const result = Object.keys(myObject)[0];
// result will return 'foo1'