当该数组本身是对象的属性时,无法访问数组对象

时间:2012-03-19 17:26:16

标签: javascript arrays object attributes

我无法访问本身是较大对象属性的对象数组。

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

上述语句返回一个包含两个对象的数组,每个对象的属性都是一个看似有效的对象数组(本例中为“技能”)。

我无法访问“skills”数组属性。我最终试图得到的数据是“item_name”属性。据我所知,应该可以通过以下方式访问:

skillprofiles[0].skills[0].item_name

有趣的是,使用“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 个答案:

答案 0 :(得分:1)

在你的第一段代码中,技能直接成为技能人员的子女。而在第二个中,你写了技巧信息[o] .skills。如果第一个有效,可能你的代码应该是:

skillprofiles.skills[0].item_name

答案 1 :(得分:0)

使用该数据结构,正确的访问权限将是:

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