2013-04-30 4 views
0

Я пытаюсь получить первое значение для объекта типа:Получение значения из вложенного объекта

{ 
"_id":"123", 
    "list":{"56":{"name":"Great ","amount":100,"place":"Town"},"57":{"name":"Great 2","amount":200,"place":"City"}}, 
    "pop":[2,3] 
} 

Это один объект около 100 или около того. Я пытаюсь получить amount от первого значения list свойства в каждом из 100 объектов? то есть выше, это будет 100

Как бы это сделать? Я использую подчеркивание JS?

+0

Ваш "список" это простой объект, а не массив, поэтому нет «первого» значения. – Bergi

+0

Покажите нам, как хранятся эти 100 объектов, если вы хотите получить доступ ко всем из них, а не только один извлеченный пример. – Bergi

ответ

0

Вы определяете список как object. Свойства объекта в порядке их определения, но мы не можем доверять его порядку. Я думаю, что Chrome ошибки об этом https://code.google.com/p/v8/issues/detail?id=164

следующего first метод дает первый элемент из списка объектов, эта функция работы в большинстве случаев, если объект пуст вернут undefined значения.

var data = { 
"_id":"123", 
    "list":{ 
     "56":{"name":"Great ","amount":100,"place":"Town"}, 
     "57":{"name":"Great 2","amount":200,"place":"City"} 
    }, 
    "pop":[2,3] 
}; 


function first(data){ 

    for (var i in data){ 
     if (data.hasOwnProperty(i)) break;  
    } 

    return data.hasOwnProperty(i) ? data[i] : undefined; 
} 

first(data.list).amount; 

Если вы хотите сохранить порядок списка .. определить их как Array. Пример

var data = { 
"_id":"123", 
    "list":[ 
     {"id" : "56" ,"name":"Great ","amount":100,"place":"Town"}, 
     {"id" : "57" ,"name":"Great 2","amount":200,"place":"City"} 
    ], 
    "pop":[2,3] 
}; 

и доступ к ним, как data.list[0]

0

Вы можете попробовать это

function getFirstAmount(obj){ 
    for(var key in obj){ 
     return obj[key].amount; 
    } 
} 

Если вам нужно, чтобы получить все ключи, вы можете попробовать этот

function getAmounts(obj){ 
    var amounts = []; 
    var i = 0; 
    for(var key in obj){ 
      amounts[i] = obj[key].amount; 
      i++; 
     } 
    } 
    return amounts; 
} 

//call function 
    var firstAmount = getFirstAmount(obj.list);