Javascript 循环遍历json子对象并对每个子对象执行操作;“元素”;

Javascript 循环遍历json子对象并对每个子对象执行操作;“元素”;,javascript,arrays,json,html-table,row,Javascript,Arrays,Json,Html Table,Row,我是json数组/对象的新手。我正在尝试访问.json文件中的一些子对象。我已经尝试了这里的建议,但我一直得到“未定义”的结果。下面是.json-- { “发援会课程”:[ { “Longtille”:“, “longDescript”:“ammo-29.html”, “atrrsLink”:“赢95+”, “delMeth”:“标准”, “sked”:[ { “classNumb”:“926”, “开始日期”:“4/16/2012”, “截止日期”:“2012年4月20日”, “位置”:“德克

我是json数组/对象的新手。我正在尝试访问.json文件中的一些子对象。我已经尝试了这里的建议,但我一直得到“未定义”的结果。下面是.json--

{
“发援会课程”:[
{
“Longtille”:“,
“longDescript”:“ammo-29.html”,
“atrrsLink”:“赢95+”,
“delMeth”:“标准”,
“sked”:[
{
“classNumb”:“926”,
“开始日期”:“4/16/2012”,
“截止日期”:“2012年4月20日”,
“位置”:“德克萨斯州沃思堡NMC”,
“状态”:“已计划”,
“清空”:“可用性”
},
{
“classNumb”:“001”,
“开始日期”:“6/4/2012”,
“截止日期”:“6/8/2012”,
“地点”:“麦克莱斯特,好的”,
“状态”:“已计划”,
“清空”:“可用性”
},
{
“classNumb”:“920”,
“开始日期”:“2012年6月18日”,
“结束日期”:“2012年6月22日”,
“地点”:“洛杉矶贝尔查斯”,
“状态”:“已计划”,
“清空”:“类已满”
}
]}
]}
我一定是做错了什么。这是我的代码。最后,我尝试用每个“sked”对象构建表行。但是我在控制台中显示单个数据元素时遇到了问题。以下是我的尝试:

$('#content').on("click", "#catList tbody tr", function() {
                    var aData = oTable.fnGetData( this );
                    console.log( aData );
                    var scheduleData = aData.sked;
                    var catLink = 'catalog/' + aData.longDescript;
                    $('#fullDescript').load(catLink, function() {
                        if (!$('#fullDescript #offerings')) {
                            $('.enrollBTN').hide();
                        };

                        if ($(scheduleData).length > 0) {
                            $(scheduleData).each(function() {
                                for(var i = 0; i < scheduleData.length; i++) {
                                    /*var startDate = aData.sked.startDate[2];
                                    var endDate = aData.sked.endDate[3];
                                    var location = aData.sked.location[4];
                                    var classNumb = aData.sked.classNumb[1];
                                    var status = aData.sked.status[5];
                                    var emptySeats = aData.sked.emptySeats[6];*/
                                    //var item = scheduleData[i];
                                    console.log( aData.sked.startDate[2] );
                                    var html = "<tr>";
                                        html += "<td>" + item.classNumb + "<\/td>";
                                        //console.log( aData.sked[1].classNumb );
                                        /*html += "<td>" + scheduleData.endDate + "<\/td>";
                                        html += "<td>" + scheduleData.location + "<\/td>";
                                        html += "<td>" + scheduleData.classNumb + "<\/td>";
                                        html += "<td>" + scheduleData.status + "<\/td>";
                                        html += "<td>" + scheduleData.emptySeats + "<\/td>";*/
                                        html += "<\/tr>";
                                        //return scheduleData;
                                    };
                                $('#schedule tbody').append($(html));
                            });
                        };
                    });

                    $('#content').hide();
                    $('#fullDescript').show();
                });
$(“#内容”)。在(“单击”,“catList tbody tr”,函数()上{
var aData=oTable.fnGetData(this);
console.log(aData);
var scheduleData=aData.sked;
var catLink='catalog/'+aData.longscript;
$('#fullDescript').load(catLink,function(){
如果(!$(“#完整描述#产品”)){
$('.enrollBTN').hide();
};
if($(scheduleData).length>0){
$(scheduleData)。每个(函数(){
对于(变量i=0;i

非常感谢您的帮助。

您似乎只需要每个循环或循环,而不是两个循环。在是否使用item=scheduleData[i]的问题上似乎也存在一些混淆。试试这个:

if ($(scheduleData).length > 0) {
    for(var i = 0; i < scheduleData.length; i++) {
        var item = scheduleData[i];
        var html = "<tr>";
        html += "<td>" + item.endDate + "</td>";
        // ... etc
        html += "</td>";
    }
}
if($(scheduleData).length>0){
对于(变量i=0;i
作为一个PS,我建议研究一个JS模板工具,比如。这将允许您从显示模板中分离数据,从而消除解析代码。它看起来像这样:

var template = "{{#sked}}<tr><td>{{endDate}}</td><td>{{location}}</td></tr>{{/sked}}";
var html = "<table>" + Mustache.render(template, aData) + "</table>";
var template=“{{{sked}}{{endDate}}{{location}}{{/sked}}”;
var html=“”+Mustache.render(模板,aData)+”;
我一定是做错了什么

是的,你是

当您使用
。每个
循环时,您通过
关键字引用当前元素。因此,对于
循环,您不需要
。或者,如果您想要
for
循环,则不需要
。每个
循环。在我看来,使用
for
循环<代码>。在这种情况下,每个
都只是一个开销

更新:@dbaseman为您提供了所需的一切:)

更新2:请尝试以下代码。基本上与dbaseman相同,但是dbaseman的代码片段没有关闭
元素

if ($(scheduleData).length > 0) {
    for(var i = 0; i < scheduleData.length; i++) {
        var item = scheduleData[i];
        var html = "<tr>";
        html += "<td>" + item.endDate + "</td>";
        // ... etc
        html += "</tr>"; // should close the <tr> here
    }
}
if($(scheduleData).length>0){
对于(变量i=0;i
dbaseman,感谢您的教育。我知道我投入太多了。我的问题似乎比我想的要简单。但当我付诸行动时,我注意到了一个问题。我只看到最后一个sked项目被渲染。我通过注释掉.json文件中最后两个sked对象证明了这一点。重新运行我的应用程序。现在它只渲染了第一个sked对象。所以在某个地方,我错过了一个外环,或者我是
if ($(scheduleData).length > 0) {
    for(var i = 0; i < scheduleData.length; i++) {
        var item = scheduleData[i];
        var html = "<tr>";
        html += "<td>" + item.endDate + "</td>";
        // ... etc
        html += "</tr>"; // should close the <tr> here
    }
}