Javascript 与突破和接球的深度互动
我写剧本有点困难 我有一个由几个模块组成的课程结构,每个模块可以有几节课 当用户进入页面时,需要定义他将选择参加的课程 业务规则是:选择尚未查看的第一课以及该课所属的模块。如果它们都是视图,请选择第一课的第一课Javascript 与突破和接球的深度互动,javascript,Javascript,我写剧本有点困难 我有一个由几个模块组成的课程结构,每个模块可以有几节课 当用户进入页面时,需要定义他将选择参加的课程 业务规则是:选择尚未查看的第一课以及该课所属的模块。如果它们都是视图,请选择第一课的第一课 const课程={ 标题:“课程名称”, 持续时间:“1小时30分钟”, 模块:[ { 标题:“第一个模块”, 经验教训:[ { 标题:“第1课”, 查看:正确 }, { 标题:“第二课”, 查看:正确 } ] }, { 标题:“第二模块”, 经验教训:[ { 标题:“第1课”, 查看:
const课程={
标题:“课程名称”,
持续时间:“1小时30分钟”,
模块:[
{
标题:“第一个模块”,
经验教训:[
{
标题:“第1课”,
查看:正确
},
{
标题:“第二课”,
查看:正确
}
]
},
{
标题:“第二模块”,
经验教训:[
{
标题:“第1课”,
查看:正确
},
{
标题:“第二课”,
查看:错误
}
]
},
{
标题:“第三模块”,
经验教训:[
{
标题:“第1课”,
查看:错误
},
{
标题:“第二课”,
查看:错误
}
]
}
]
}
const selectedModule={}
const selectedLesson={}
我试过类似的东西
course.modules.find((模块)=>{
返回模块.课程.查找((课程)=>{
如果(!lesson.view){
selectedModule=模块
selectedLesson=课程
返回真值
}否则{
返回错误
}
})
})
但这似乎不是一个好的解决方案,此外,如果find
失败,我不会执行catch
,然后从第一个模块中选择第一课
下一步我能试试什么?试试这样的东西
var module_and_lesson_loaded =
(course.modules.length>0 && course.modules.find((module))?
course.modules.find((module) => {
return (module.lessons.length>0 && module.lessons.find((lesson))?
module.lessons.find((lesson) => {
if (!lesson.viewed) {
selectedModule = module
selectedLesson = lesson
return true
} else {
return false
}
}):false;
}):false;
if(module_and_lesson_loaded){
//your code here
}else{
selectedModule = course.modules[0]
selectedLesson = selectedModule.lessons[0]
}
我想这可能不是正确的方法,但它会检查这些数组是否为空,如果为空则返回null。尝试类似的操作
var module_and_lesson_loaded =
(course.modules.length>0 && course.modules.find((module))?
course.modules.find((module) => {
return (module.lessons.length>0 && module.lessons.find((lesson))?
module.lessons.find((lesson) => {
if (!lesson.viewed) {
selectedModule = module
selectedLesson = lesson
return true
} else {
return false
}
}):false;
}):false;
if(module_and_lesson_loaded){
//your code here
}else{
selectedModule = course.modules[0]
selectedLesson = selectedModule.lessons[0]
}
我想这可能不是正确的方法,但它会检查这些数组是否为空,如果为空则返回null。我会这样做:
- 查找第一个不完整的模块,即至少有一个课程未被查看的模块
- 从匹配的模块中获取未查看的课程
- 如果查看了所有内容,请查找至少包含一节课的第一节模块,然后获取该模块的第一课
{title: "second module", lessons: Array(2)}
{title: "lesson 2", viewed: false}
当所有内容都设置为查看时:true
{title: "first module", lessons: Array(2)}
{title: "lesson 1", viewed: true}
我会这样做:
- 查找第一个不完整的模块,即至少有一个课程未被查看的模块
- 从匹配的模块中获取未查看的课程
- 如果查看了所有内容,请查找至少包含一节课的第一节模块,然后获取该模块的第一课
{title: "second module", lessons: Array(2)}
{title: "lesson 2", viewed: false}
当所有内容都设置为查看时:true
{title: "first module", lessons: Array(2)}
{title: "lesson 1", viewed: true}
你的解决方案可以奏效,但这不是最好的办法。您只需在开始时设置默认值
const课程={
标题:“课程名称”,
持续时间:“1小时30分钟”,
模块:[{
标题:“第一个模块”,
经验教训:[{
标题:“第1课”,
查看:正确
},
{
标题:“第二课”,
查看:正确
}
]
},
{
标题:“第二模块”,
经验教训:[{
标题:“第1课”,
查看:正确
},
{
标题:“第二课”,
查看:错误
}
]
},
{
标题:“第三模块”,
经验教训:[{
标题:“第1课”,
查看:错误
},
{
标题:“第二课”,
查看:错误
}
]
}
]
}
让selectedModule=course.modules[0]
让selectedLesson=selectedModule.lessons[0]
课程.模块.查找((模块)=>{
返回模块.课程.查找((课程)=>{
如果(!lesson.view){
selectedModule=模块
selectedLesson=课程
返回真值
}否则{
返回错误
}
})
})
console.log(selectedModule.title,selectedLesson.title)代码>您的解决方案可以工作,但这不是最好的做法。您只需在开始时设置默认值
const课程={
标题:“课程名称”,
持续时间:“1小时30分钟”,
模块:[{
标题:“第一个模块”,
经验教训:[{
标题:“第1课”,
查看:正确
},
{
标题:“第二课”,
查看:正确
}
]
},
{
标题:“第二模块”,
经验教训:[{
标题:“第1课”,
查看:正确
},
{
标题:“第二课”,
查看:错误
}
]
},
{
标题:“第三模块”,
经验教训:[{
标题:“第1课”,
查看:错误
},
{
标题:“第二课”,
查看:错误
}
]
}
]
}
让selectedModule=course.modules[0]
让selectedLesson=selectedModule.lessons[0]
课程.模块.查找((模块)=>{
返回模块.课程.查找((课程)=>{
如果(!lesson.view){
selectedModule=模块
selectedLesson=课程
返回真值
}否则{
返回错误
}
})
})
console.log(selectedModule.title,selectedLesson.title)代码>给定您的业务规则:
选择尚未查看的第一课以及该课所属的模块。如果它们都是视图,请选择第一课的第一课
A在这里非常有效:
//循环所有模块并执行逻辑以确定结果
const result=course.modules.reduce((firstUnviewedLesson,currentModule)=>{
//如果我们已经找到了第一个未查看的课程,请将其返回
如果(firstUnviewedLesson)返回firstUnviewedLesson
//尝试在模块中查找未查看的课程
C