遍历嵌套JavaScript对象的更好方法
我正在努力安排以下obj中所有课程的时间表:遍历嵌套JavaScript对象的更好方法,javascript,loops,object,nested,Javascript,Loops,Object,Nested,我正在努力安排以下obj中所有课程的时间表: {"COSC1121":{ "name":"Course 1 name", "color":"#1ABC9C", "type":{ "lecture":{ "0":{ "building":"31", "day":0, "starttime":1, "endti
{"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
}
}
每个课程有多个不同的班级类型,每个班级类型有多个选项(具有不同的建筑、日期、开始时间、结束时间)。但每个课程的每个类型只有一个选项可安排在时间表中
例如:课程代码COSC1211只有一种类型是讲座,而本讲座有2个选项=>仅安排其中的1个选项
我所尝试的:
$.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
...
});
});
});
这是一个代码块,只需循环通过该对象并排列每个类类型的第一个选项。它很好用
现在,我想让它循环通过所有可能的安排(所有可能),如:
1/选择COSC1121->第0课,其余部分选择第1选项
2/选择COSC1121->讲座1
3/
n/选择COSC1121->第0课和第1112课->教程1(第2选项)
等等
现在我被困在这个问题上了。如有任何建议,我们将不胜感激
谢谢
p/S:输出格式应与原始对象格式相同,只需去掉未选择的选项即可。例如:
{
0: {
"COSC1121":{
"name":"Course 1 name",
"color":"#1ABC9C",
"type":{
"lecture":{
"0":{
"building":"31",
"day":0,
"starttime":1,
"endtime":3
}
}
}
},
"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: {
"COSC1121":{
"name":"Course 1 name",
"color":"#1ABC9C",
"type":{
"lecture":{
"1":{
"building":"95",
"day":3,
"starttime":6,
"endtime":8
}
}
}
},
"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
}
}
}
}
},
2: {
"COSC1121":{
"name":"Course 1 name",
"color":"#1ABC9C",
"type":{
"lecture":{
"0":{
"building":"31",
"day":0,
"starttime":1,
"endtime":3
}
}
}
},
"POPP1112":{
"name":"Course 2 name",
"color":"#1ABC9C",
"type":{
"lecture":{
"0":{
"building":"71",
"day":2,
"starttime":2,
"endtime":4
}
},
"tutorial":{
"1":{
"building":"80",
"day":3,
"starttime":2,
"endtime":5
}
}
}
}
},
3: {
"COSC1121":{
"name":"Course 1 name",
"color":"#1ABC9C",
"type":{
"lecture":{
"0":{
"building":"31",
"day":0,
"starttime":1,
"endtime":3
}
}
}
},
"POPP1112":{
"name":"Course 2 name",
"color":"#1ABC9C",
"type":{
"lecture":{
"0":{
"building":"71",
"day":2,
"starttime":2,
"endtime":4
}
},
"tutorial":{
"2":{
"building":"56",
"day":3,
"starttime":7,
"endtime":9
}
}
}
}
}
}
我对你可能需要什么略知一二。您似乎需要类之间所有选项的可能组合。为了在我写答案之前进行验证,你能创建一个json对象作为输出吗?嗨@CharlieH,请参考我上面编辑的帖子。谢谢您的输入和输出之间的唯一区别是输出中没有任何项目超出“类型”下的第0项。所以,基本上你需要遍历对象并删除所有附加项-但保留第0项?@CharlieH,不,不,可能这里有误解。in和output之间的区别在于,输出不包含未选择的类类型(剥离)。因此,输出是一个更大的obj,包含所有可能性,每个可能性都是输入objYa的副本(简化),我看到注释
//第二种可能性。请给我看看这些可能性。