通过索引访问非数字对象属性?

如果我有这样的数组:

var arr = ['one','two','three']; 

我可以通过这样访问不同的部分:

 console.log(arr[1]); 

我怎样才能通过他们的顺序,而不是按键访问对象的属性?

例:

 var obj = { 'something' : 'awesome', 'evenmore' : 'crazy' }, jbo = { 'evenmore' : 'crazy', 'something' : 'awesome' }; 

我怎样才能得到每个对象的第一个属性 – 来自obj “something”和来自jbo的“evenmore” – 没有明确使用属性名称?

现在,你们中的一些人似乎认为我是在类似于:

 console.log(obj['something']); 

事实并非如此,我特别关注索引,就像第一个例子 – 如果可能的话。

“我特别想把目标locking在指数上,就像第一个例子 – 如果可能的话。”

不,这是不可能的。

你可以得到最接近的是获得一个对象的数组的键,并使用它:

 var keys = Object.keys( obj ); 

…但不能保证按照您定义的顺序返回密钥。 所以它可能最终看起来像:

 keys[ 0 ]; // 'evenmore' keys[ 1 ]; // 'something' 

我能想到的唯一方法就是创build一个方法,使用Object.keys();给你属性Object.keys();

 var obj = { dog: "woof", cat: "meow", key: function(n) { return this[Object.keys(this)[n]]; } }; obj.key(1); // "meow" 

演示: http : //jsfiddle.net/UmkVn/

可以使用Object.prototype;将其扩展到所有对象Object.prototype; 但通常不推荐。

相反,使用一个函数帮助器:

 var object = { key: function(n) { return this[ Object.keys(this)[n] ]; } }; function key(obj, idx) { return object.key.call(obj, idx); } key({ a: 6 }, 0); // 6 
 var obj = { 'key1':'value', '2':'value', 'key 1':'value' } console.log(obj.key1) console.log(obj['key1']) console.log(obj['2']) console.log(obj['key 1']) // will not work console.log(obj.2) 

编辑:

“我特别想把目标locking在指数上,就像第一个例子 – 如果可能的话。”

其实“索引”是关键。 如果你想存储一个键的位置,你需要创build一个自定义对象来处理这个。

如果你不确定Object.keys()是否会以正确的顺序返回你的键,你可以试试这个逻辑

 var keys = [] var obj = { 'key1' : 'value1', 'key2' : 'value2', 'key3' : 'value3', } for (var key in obj){ keys.push(key) } console.log(obj[keys[1]]) console.log(obj[keys[2]]) console.log(obj[keys[3]]) 

通过jquery你可以做到这一点:

 var arr = $.map(obj,function(value, key) { return value; }); alert(obj[0]);