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

新手上路,请多包涵

如果我有这样的数组:

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

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

 console.log(arr[1]);

如何按顺序而不是按键访问对象属性?

例子:

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

我将如何获得每个对象的第一个属性——来自 --- 的“something”和来自 obj 的“evenmore” jbo 显式使用属性名称?

现在,你们中的一些人似乎认为我在追求类似的东西:

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

事实并非如此,我特别希望以索引为目标,就像第一个示例一样——如果可能的话。

原文由 daryl 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 408
2 个回答

“我特别希望以指数为目标,就像第一个例子一样——如果可能的话。”

不,这是不可能的。

您可以获得的最接近的是获取对象键的数组,并使用它:

 var keys = Object.keys( obj );

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

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

原文由 user113716 发布,翻译遵循 CC BY-SA 3.0 许可协议

我能想到的唯一方法是创建一个使用 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; 将其扩展到所有对象,但通常不推荐这样做。

相反,使用函数助手:

 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

原文由 David G 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题