Невозможно получить доступ к объектам массива, когда этот массив сам по себе является атрибутом объекта - PullRequest
0 голосов
/ 19 марта 2012

Я не могу получить доступ к массиву объектов, который сам по себе является атрибутом более крупного объекта.

console.log(skillprofiles);
console.log(skillprofiles.skills);

Вышеприведенные операторы возвращают массив из двух объектов, каждый из которых имеет атрибут, который, по-видимому, является допустимым массивом объектов (в данном примере это «навыки»).

Я не могу получить доступ к атрибуту массива «skill». Данные, которые я в конечном итоге пытаюсь получить, это атрибут "item_name". Насколько я знаю, это должно быть доступно через:

skillprofiles[0].skills[0].item_name

Интересно, что проверка типа атрибута «skill» с помощью «typeof» возвращает «объект» вместо массива. Это может быть потому, что я передаю массив объектов от одного объекта к другому ранее в моем коде. Я думал, что делаю это правильно, и, кажется, подтвердил это своими заявлениями о регистрации.

ОБНОВЛЕНИЕ с фактическими данными:

[{
"skillprofile_id": 144,
"skillprofile_name": " On-boarding",
"start_date": "January 30 2012",
"progress": 0,
"complete_date": " ",
"category": 1053,
"skills": [{
    "category": "Acquire: Onboard New Hires",
    "item_name": "3. On-boarding a New Hire - Day 1",
    "skill_type": "activity",
    "object_id": 68,
    "duration": "8:00:00",
    "sco_status_code": 6,
    "action": "activity",
    "has_forums": false
}, {
    "category": "Acquire: Onboard New Hires",
    "item_name": "4. On-boarding Checklist",
    "skill_type": "activity",
    "object_id": 67,
    "duration": "1:00:00",
    "sco_status_code": 6,
    "action": "activity",
    "has_forums": false
}]
}, {
"skillprofile_id": 143,
"skillprofile_name": " Setting Up Systems",
"start_date": "January 30 2012",
"progress": 0,
"complete_date": " ",
"category": 1053,
"skills": [{
    "category": "Acquire: Onboard New Hires",
    "item_name": "1. Office Organization",
    "skill_type": "activity",
    "object_id": 65,
    "duration": "4:00:00",
    "sco_status_code": 6,
    "action": "activity",
    "has_forums": false
}, {
    "category": "Acquire: Onboard New Hires",
    "item_name": "2. Welcome to the Team Documents",
    "skill_type": "activity",
    "object_id": 66,
    "duration": "2:00:00",
    "sco_status_code": 6,
    "action": "activity",
    "has_forums": false
}, {
    "category": "Acquire: Onboard New Hires",
    "item_name": "3. Welcome Documents: Feedback ",
    "skill_type": "activity",
    "object_id": 150,
    "duration": "1:00:00",
    "sco_status_code": 6,
    "action": "activity",
    "has_forums": false
}]
}]

ОБНОВЛЕНИЕ 2:

Учитывая полученные ответы, мне кажется, что я смогу выполнить следующее:

$.each(skillprofiles, function(){
  console.log(this.skills)
});

Я могу сделать это из консоли, но операторы консоли возвращаются как «неопределенные» при запуске из моего кода

Ответы [ 2 ]

1 голос
/ 19 марта 2012

В вашем первом блоке кода скиллы непосредственно являются потомками скиллов.Тогда как во втором вы пишете skillprofiles [o] .skills.Если первый работает, возможно, ваш код должен быть:

skillprofiles.skills[0].item_name
0 голосов
/ 20 марта 2012

При такой структуре данных правильный доступ будет выглядеть следующим образом:

skillprofiles[i].skills[j].item_name

Вы можете увидеть, как он работает здесь: http://jsfiddle.net/jfriend00/wPLZZ/


skillprofiles - это массив объектовтаким образом, вы получаете объект из массива с помощью:

skillprofiles[i]

Каждый объект в этом массиве имеет ряд свойств, и одно из этих свойств называется skills, поэтому вы получите это свойство с помощью

skillprofiles[i].skills  

Содержимое свойства skills представляет собой другой массив, поэтому вы можете получить элемент из этого массива с помощью следующего:

skillprofiles[i].skills[j]

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

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