考虑:

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

我该怎么做:

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

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

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

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


当前回答

根据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'

其他回答

根据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'

ES6

const [first] = Object.keys(obj)

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

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

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

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