2016-09-04 9 views
0

У меня есть JavaScript object. Я пытаюсь получить classid от rgInventory.(someid).classid и всегда получаю undefined.JavaScript информация об объекте

Мой код (пункты мой объект):

for (var i = 0; i < Object.keys(items.rgInventory).length; i++) { 
    console.log(items.rgInventory[i].classid); 
} 
+0

@bluetoft Это опечатка, которая могла бы быть решена в течение примерно десяти секунд, просто рассматривая соответствующую переменные в отладчике. Это определение учебника «не полезно». –

+0

console.log (items.rgInventory ['1908569708']. Classid); –

ответ

2

Ваш i не является ключом, а порядковым номером этого ключа.

Изменить код:

var keys = Object.keys(items.rgInventory); 
for (var i = 0; i < keys.length; i++) { 
    console.log(items.rgInventory[keys[i]].classid); 
} 

Обратите внимание, что с синтаксисом for...of, он может быть кодированной как это:

for (var key of Object.keys(items.rgInventory)) { 
    console.log(items.rgInventory[key].classid); 
} 

Синтаксис for...in является более подходящим для итерации ключей объекта:

for (var key in items.rgInventory) { 
    console.log(items.rgInventory[key].classid); 
} 

Вы также можете использовать forEach обратного вызова, с красивым вторым аргументом для установки this:

Object.keys(items.rgInventory).forEach(function (key) { 
    console.log(this[key].classid); 
}, items.rgInventory); 
+2

Возможно, кто-то из участников голосования объяснит, в чем проблема? – trincot

+0

Мне нравится использовать 'for ... of', но в этом случае он не идентичен (и более многословному)' for (let key in items.rgInventory) '? –

+0

@torazaburo, они разные и имеют другую цель: 'for ... of' дает ключевые значения, а' for ... in' дает их порядковый номер (т. Е. 0, 1, 2, .. .), что в этом случае менее полезно. – trincot

-1

Проблема заключается в том, что вы используете i переменную в качестве поиска, вместо Object.keys(items.rgInventory)[i]

попробовать это:

for (var i = 0; i < Object.keys(items.rgInventory).length; i++) { 
    console.log(items.rgInventory[Object.keys(items.rgInventory)[i]].classid); 
} 

Но это, вероятно, не так, как вы хотите сделать этот поиск ... Это немного чище:

Object.keys(items.rgInventory).forEach(function(key) { 
    console.log(items.rgInventory[key].classid) 
}) 
+0

Может ли downvoter объяснить его проблему ВСЕМИ ответами? – bluetoft

Смежные вопросы