Получение первого индекса объекта - PullRequest
194 голосов
/ 26 мая 2009

Рассмотрим:

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

Как бы я это сделал:

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

Очевидно, что это не работает, потому что первый индекс называется foo, не 0.

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

работает, но я не знаю, что он называется foo. Это можно назвать как угодно. Я просто хочу первый.

Ответы [ 14 ]

318 голосов
/ 11 июля 2013

Просто для удовольствия, это работает в JS 1.8.5

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

Это соответствует тому же порядку, что и при

for (o in obj) { ... }
203 голосов
/ 05 мая 2010

Если вы хотите что-то краткое, попробуйте:

for (first in obj) break;

alert(first);

в виде функции:

function first(obj) {
    for (var a in obj) return a;
}
76 голосов
/ 26 мая 2009

они не действительно заказаны, но вы можете сделать:

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

.hasOwnProperty() важно игнорировать объекты-прототипы.

74 голосов
/ 06 ноября 2013

Это не даст вам первый, поскольку объекты javascript не упорядочены, однако в некоторых случаях это нормально.

myObject[Object.keys(myObject)[0]]
60 голосов
/ 26 мая 2009

Если порядок объектов значительный, вам следует пересмотреть свою схему JSON, чтобы сохранить объекты в массиве:

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

или, может быть:

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

Как отмечает Бен Альперт, свойства объектов Javascript неупорядочены, и ваш код нарушается, если вы ожидаете, что они будут перечисляться в том же порядке, в котором они указаны в литерале объекта - свойства "first" не существует.

38 голосов
/ 05 января 2017

для первого ключа объекта вы можете использовать

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

для значения

console.log(object[Object.keys(object)[0]]);//print key's value
17 голосов
/ 26 мая 2009

Невозможно получить первый элемент, поскольку «хэши» (объекты) в JavaScript имеют неупорядоченные свойства. Лучше всего хранить ключи в массиве:

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

Затем используйте это, чтобы получить правильное значение:

object[keys[0]]
13 голосов
/ 28 августа 2017

ES6

const [first] = Object.keys(obj)
12 голосов
/ 29 августа 2013

Используя подчеркивание, вы можете использовать _.pairs, чтобы получить первую запись объекта в виде пары ключ-значение следующим образом:

_.pairs(obj)[0]

Тогда ключ будет доступен с дополнительным индексом [0], значение с [1]

10 голосов
/ 26 мая 2009

У меня вчера была такая же проблема. Я решил это так:

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.

Не самое элегантное решение, и я почти уверен, что оно может давать разные результаты в разных браузерах (то есть в спецификации сказано, что перечисление не требуется для перечисления свойств в том же порядке, в котором они были определены). Тем не менее, у меня было только одно свойство в моем объекте, так что это не проблема. Мне просто нужен был первый ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...