Получение первого свойства JSON - PullRequest
18 голосов
/ 12 июля 2009

Есть ли способ получить имя первого свойства объекта JSON?

Я бы хотел сделать что-то вроде этого:

var firstProp = jsonObj[0];

edit: Я получаю объект JSON, который содержит категории массивов с URL-адресами изображений.

вроде так:

{
  "category1":["image/url/1.jpg","image/url/2.jpg"],
  "category2":["image/url/3.jpg","image/url/4.jpg"]
}

Затем я перебираю объект для вставки изображений, и все, что мне действительно нужно, - это элегантный способ увидеть, какая категория была вставлена ​​первой. Сначала я просто сделал

for (var cat in images) {
    if (i==0) firstCat = cat;
    ...
}

Но что-то как "чувствовалось" безобразно ... Так что это был просто вопрос элегантности: p

Ответы [ 5 ]

33 голосов
/ 12 июля 2009

Порядок свойств объекта не гарантируется, что не будет таким же, как вы их вводите. На практике, однако, все основные браузеры возвращают их по порядку. Так что, если у вас все в порядке с этим положением ...

var firstProp;
for(var key in jsonObj) {
    if(jsonObj.hasOwnProperty(key)) {
        firstProp = jsonObj[key];
        break;
    }
}

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

С учетом всех обстоятельств, если вы действительно, действительно, абсолютно, позитивно хотите быть уверены, что все будет в правильном порядке, вам нужно использовать массив. В противном случае, все в порядке.

Смежный вопрос: Порядок элементов - для цикла (… in…) в javascript

24 голосов
/ 10 мая 2015
console.log(jsonObj[Object.keys(jsonObj)[0]]);
14 голосов
/ 12 июля 2009

Не существует "первого" свойства. Свойства объекта неупорядочены.

Вы можете получить любой, который двигатель JS решит сначала снабдить циклом.

function maybe_first_in_object(ob) {
    for (var props in ob) {
        return prop;
    }
}

& hellip; но если порядок имеет значение, используйте массив, а не объект.

2 голосов
/ 12 июля 2009

Отличный вопрос. Я не знаю никакого способа, кроме повторения в цикле for-in. Вам нужно только повторить, хотя. В целях безопасности убедитесь, что это известное свойство [ подробнее ].

for (var propName in jsonObj) {
    if (jsonObj.hasOwnProperty(propName)) {
        return propName;    // or do something with it and break
    }
}

Отредактировано для большей ясности, что вы перебираете имена свойств, а не их значения.

1 голос
/ 06 ноября 2014

При использовании jQuery вы также можете использовать $.each для перебора объекта JSON. Выглядит чище IMO, чем при использовании for -loop

var items = {
    'item1': 'content',
    'item2': 'content',
    'item3': 'content'
}

$.each(items, function() { 
    console.log($(this)[0])
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...