迭代嵌套JavaScript对象的更好方法

时间:2016-01-27 05:43:49

标签: javascript loops object nested

我试图安排下面obj中所有课程的时间表:

loader-icon

每个 COURSE 有多个不同的班级 TYPE ,每个班级 TYPE 有多个 OPTION (与不同的建筑物,日,开始时间,结束时间)。但每个 COURSE 的每个 TYPE 只有1个选项可以安排到时间表中。

例如:课程代码 COSC1121 只有1个TYPE 讲座,本讲座有 2个选项 =>只安排那2个中的1个

我尝试过:

{"COSC1121":{
    "name":"Course 1 name",
    "color":"#1ABC9C",
    "type":{
        "lecture":{
            "0":{
                "building":"31",
                "day":0,
                "starttime":1,
                "endtime":3
            }
            "1":{
                "building":"95",
                "day":3,
                "starttime":6,
                "endtime":8
            }
        }
    },
    "priority":0,
    "arranged":true
},
"POPP1112":{
    "name":"Course 2 name",
    "color":"#1ABC9C",
    "type":{
        "lecture":{
            "0":{
                "building":"71",
                "day":2,
                "starttime":2,
                "endtime":4
            }
        },
        "tutorial":{
            "0":{
                "building":"13",
                "day":3,
                "starttime":1,
                "endtime":3
            }
            "1":{
                "building":"80",
                "day":3,
                "starttime":2,
                "endtime":5
            }
            "2":{
                "building":"56",
                "day":3,
                "starttime":7,
                "endtime":9
            }
        }
    },
"priority":1,
"arranged":true
}
}

该代码块只是遍历that_obj并安排每个类类型的第一个选项。它运作得很好。

现在我想让它循环通过所有可能的安排(所有可能性),如:

1 /选择COSC1121 - >讲座0和其余的第一选择

2 /选择COSC1121 - >讲座1 ...

3 / ...

n /选择COSC1121 - >讲座0和POPP1112 - >教程1(第二个选项)......

SO ON ......

目前陷入困境。任何建议和建议将不胜感激!

由于

P / S:输出格式应与原始对象格式相同,只需删除未选择的选项。例如:

$.each(that_obj, function(i){

    var this_c_code = that_obj[i].code,
        this_c_name = that_obj[this_c_code].name,
        this_c_color = that_obj[this_c_code].color;

        that_obj[this_c_code].arranged = true;

        $.each( that_obj[this_c_code].type, function(ii) {

            // ii now is the string of course_type (lecture...)

            $.each( that_obj[this_c_code].type[ii], function(iii) {

                // Create short name
                var this_temp_class_opt = that_obj[this_c_code].type[ii][iii];

                var update_result = c_set_timetable_occupy( this_temp_class_opt, this_c_name, this_c_code, ii, this_c_color );

                // Check the update_result and add this class option into another object
                ...
            });
        });
    });

0 个答案:

没有答案