获取对象的第一个索引

考虑:

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

我该怎么做:

var first = object[0];
console.log(first);
显然,这行不通,因为第一个索引名为foo, 不是0。< / p >
console.log(object['foo']);

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

397190 次浏览

没有办法获得第一个元素,因为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.

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

你可以这样做:

var object = {
foo:{a:'first'},
bar:{},
baz:{}
}




function getAttributeByIndex(obj, index){
var i = 0;
for (var attr in obj){
if (index === i){
return obj[attr];
}
i++;
}
return null;
}




var first = getAttributeByIndex(object, 0); // returns the value of the
// first (0 index) attribute
// of the object ( {a:'first'} )

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

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

或者:

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

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

它们不是真的有序的,但是你可以:

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

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

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

for (first in obj) break;


alert(first);

包装成函数:

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

我的解决方案:

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));

基于CMS 回答。我没有直接得到值,而是在它的下标处取键,并使用this来获得值:

Object.keyAt = function(obj, index) {
var i = 0;
for (var key in obj) {
if ((index || 0) === i++) return key;
}
};




var obj = {
foo: '1st',
bar: '2nd',
baz: '3rd'
};


var key = Object.keyAt(obj, 1);
var val = obj[key];


console.log(key); // => 'bar'
console.log(val); // => '2nd'

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

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

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

for (o in obj) { ... }

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

_.pairs(obj)[0]

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

这不会给你第一个,因为javascript对象是无序的,但这在某些情况下是好的。

myObject[Object.keys(myObject)[0]]

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

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

价值

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

获取对象的第一个键

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


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


// result will return 'foo1'

ES6

const [first] = Object.keys(obj)