我正在开发一个项目,我想创建一个名为full_day []的数组,在通过day_schedule()之后,它与数组time_plan []具有完全相等的长度.
这是我的代码:
function day_schedule(){
var time_plan = [{"lesson_start":"08:00","lesson_end":"09:00"},{"lesson_start":"09:00","lesson_end":"10:00"},{"lesson_start":"10:00","lesson_end":"11:00"},{"lesson_start":"11:00","lesson_end":"12:00"},{"lesson_start":"12:00","lesson_end":"13:00"},{"lesson_start":"13:00","lesson_end":"13:30"},{"lesson_start":"13:30","lesson_end":"14:30"}];
var day = [{"subject_name":"Math-1","lesson_start":"08:00","lesson_end":"09:00"},{"subject_name":"Phy","lesson_start":"11:00","lesson_end":"12:00"},{"subject_name":"Engl","lesson_start":"12:00","lesson_end":"13:00"}];
var key1 = 'lesson_start';
var key2 = 'lesson_end';
var full_day = [];
for (var d = 0; d < day.length; d++) {
var start_time = day[d].lesson_start;
var end_time = day[d].lesson_end;
for (var i = 0; i < time_plan.length; i++) {
var search_key = time_plan[i][key1] == start_time && time_plan[i][key2] == end_time;
if (search_key == true) {
document.writeln('day matched == ' + day[d],'<br>');
full_day.push(day[d]);
} else {
full_day.push({
lesson_start: ' ',
lesson_end: ' ',
subject_name: ' '
});
}
}
console.log('full day',full_day.length, full_day);
}
}
day_schedule();
我期待着结果
full day 7 [
{
"subject_name": "Math-1",
"lesson_start": "08:00",
"lesson_end": "09:00"
},
{
"lesson_start": " ",
"lesson_end": " ",
"subject_name": " "
},
{
"lesson_start": " ",
"lesson_end": " ",
"subject_name": " "
},
{
"subject_name": "Phy",
"lesson_start": "11:00",
"lesson_end": "12:00"
},
{
"subject_name": "Engl",
"lesson_start": "12:00",
"lesson_end": "13:00"
},
{
"lesson_start": " ",
"lesson_end": " ",
"subject_name": " "
},
{
"lesson_start": " ",
"lesson_end": " ",
"subject_name": " "
}
];
但我不知道该怎么做.
最佳答案 如果您希望full_day大小与time_plan匹配,那么迭代完全错误.
你在代码中所做的是在一天中迭代每个元素(3个元素),并且对于time_plan中的每个元素(7个元素),为这些元素中的每一个元素添加一个对象full_day.
所以你得到的是:
>在第一天将第7个元素添加到full_day(7个元素)
> Secon元素在一天中你将另外7个对象添加到full_day(14个元素)
>第三个元素,你再次添加7个对象到full_day(21个元素)
如果你想保留你使用的逻辑,我建议你反过来转动你的循环:
function day_schedule(){
var time_plan = [{"lesson_start":"08:00","lesson_end":"09:00"},
{"lesson_start":"09:00","lesson_end":"10:00"},
{"lesson_start":"10:00","lesson_end":"11:00"},
{"lesson_start":"11:00","lesson_end":"12:00"},
{"lesson_start":"12:00","lesson_end":"13:00"},
{"lesson_start":"13:00","lesson_end":"13:30"},
{"lesson_start":"13:30","lesson_end":"14:30"}];
var day =[{
"subject_name":"Math1",
"lesson_start":"08:00",
"lesson_end":"09:00"
},
{
"subject_name":"Phy",
"lesson_start":"11:00",
"lesson_end":"12:00"
},
{
"subject_name":"Engl",
"lesson_start":"12:00",
"lesson_end":"13:00"
}];
var key1 = 'lesson_start';
var key2 = 'lesson_end';
var full_day = [];
for (var tp = 0; tp < time_plan.length; tp++) {
var start_time = time_plan[tp].lesson_start;
var end_time = time_plan[tp].lesson_end;
var lesson = {
lesson_start: ' ',
lesson_end: ' ',
subject_name: ' '
};
for (var i = 0; i < day.length; i++) {
var search_key = day[i][key1] == start_time && day[i][key2] == end_time;
if (search_key == true) {
lesson = day[i]
}
}
full_day.push(lesson)
}
console.log('full day',full_day.length, full_day);
}
day_schedule();
如您所见,这给出了所需的输出.
现在,我们还可以修改代码以使其更漂亮并使用一些有用的JavaScript数组函数,如find()
function day_schedule(){
var time_plan = [{"lesson_start":"08:00","lesson_end":"09:00"},
{"lesson_start":"09:00","lesson_end":"10:00"},
{"lesson_start":"10:00","lesson_end":"11:00"},
{"lesson_start":"11:00","lesson_end":"12:00"},
{"lesson_start":"12:00","lesson_end":"13:00"},
{"lesson_start":"13:00","lesson_end":"13:30"},
{"lesson_start":"13:30","lesson_end":"14:30"}
];
var day =[{
"subject_name":"Math1",
"lesson_start":"08:00",
"lesson_end":"09:00"
},
{
"subject_name":"Phy",
"lesson_start":"11:00",
"lesson_end":"12:00"
},
{
"subject_name":"Engl",
"lesson_start":"12:00",
"lesson_end":"13:00"
}];
var full_day = [];
// Use foreach instead of regular for when you iterate arrays
for (tp in time_plan) {
var plan = time_plan[tp]
var start_time = plan.lesson_start;
var end_time = plan.lesson_end;
// Use this function to find a suitable lesson given start and end times
var lesson = day.find(function(d) {
var start_matches = d.lesson_start == start_time;
var end_matches = d.lesson_end == end_time;
var matches = start_matches && end_matches;
return start_matches && end_matches;
}) || { // ... or assing a default empty value
lesson_start: ' ',
lesson_end: ' ',
subject_name: ' '
};
full_day.push(lesson)
}
console.log('full day',full_day.length, full_day);
}
day_schedule();
希望这可以帮助.