考虑:

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

我该怎么做:

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

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

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

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


当前回答

你可以这样做:

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'} )

其他回答

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

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

没有办法获得第一个元素,因为JavaScript中的“散列”(对象)具有无序属性。最好的方法是将键存储在数组中:

var keys = ["foo", "bar", "baz"];

然后使用它来获得正确的值:

object[keys[0]]

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

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

或者:

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

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

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

_.pairs(obj)[0]

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

获取对象的第一个键

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

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

// result will return 'foo1'