Javascript 递归调用未捕获
我正在为学校做一个项目 项目中有课程,但课程有以前的课程 课程如下所示:Javascript 递归调用未捕获,javascript,html,css,web,recursion,Javascript,Html,Css,Web,Recursion,我正在为学校做一个项目 项目中有课程,但课程有以前的课程 课程如下所示: "id": "math3", "previous": ["math2", "math1"], "name":"Gestión de Proyectos", "proffesor":"Viviana Rocco
"id": "math3",
"previous": ["math2", "math1"],
"name":"Gestión de Proyectos",
"proffesor":"Viviana Rocco",
"credits":"4,5",
"description":""
我有一个课程列表,在课程中还有其他以前的课程。此外,当所有课程都显示时,我有一个HTML,所以我想做一个函数,如果我们将鼠标悬停在课程框上,前面的课程框就会改变颜色
所以我做了这个函数:
function paint(id) {
for (i = 0; i < courses.length; i++) {
if (materias[i].id === id && (courses[i].previous.length > 0)) {
for (j = 0; j < courses[i].previous.length; j++) {
if (courses[i].previous[j] !== null) {
document.getElementById(courses[i].previous[j]).style.backgroundColor = "rgba(255,99,71,0.5)";
document.getElementById(courses[i].previous[j]).style.boxShadow = "0px 0px 0px 0.2rem rgba(220,20,60,0.5)";
paintPrevious(courses[i].previous[j]);
}
}
}
}
}
}
function paintPrevious(courseId){
for (i = 0; i < courses.length; i++) {
if (courses[i].id === courseId) {
if(courses[i].previous !== null && courses[i].previous.length > 0){
for(j = 0; j < courses[i].previous.length; j++){ // This line the exception
document.getElementById(courses[i].previous[j]).style.backgroundColor = "rgba(214, 132, 56,0.5)";
document.getElementById(courses[i].previous[j]).style.boxShadow = "0px 0px 0px 0.2rem rgba(220,20,60,0.5)"
console.log("pinto")
paintPrevious(materias[i].hijo[j]); // recursive call
}
}
}
}
}
这里有几个问题。首先,我在评论中提到了命名问题。第二个事实是你正在检查
courses[i].previous[j]!=null,当不需要时,但如果是,您可能需要检查未定义的
。。。您可以通过选中!=空值
(一等于符号。)
但是最大的问题是你没有声明你的循环变量i
和j
未声明,因此是全局的。当您在paintPrevious
内部更改i
时,您也在paint
内部更改它。将(i=0;…)
的更改为(让i=0;…)
的和类似的j
可以解决您的问题
const课程=[
{id:“math1”,name:“Class 1”},
{id:“math2”,前一个:[“math1”],名称:“Class 2”},
{id:“math3”,前一个:[“math2”,“math1”],名称:“Class 3”}
]
//从课程中构建HTML。
courses.forEach(course=>document.getElementById('courses')。innerHTML+=
`${course.name}(先决条件:${(course.previous | | |[])。加入(',')})`
)
//测试油漆功能
油漆('math3')
功能漆(id){
for(设i=0;i0)){
for(设j=0;j0){
对于(设j=0;j
courses[i]
但是这样一个变量从未定义过,变量名是courses
整个courses
结构是什么样子的?这一行是一个courses数组,if(materialas[i].id==id&(courses[i].previous.length>0))
,您尝试访问courses[i].previous的length
属性,而不首先检查courses[i].previous
是否存在。此外,该行使用“materials”
。那应该是“课程”吗?如果你解决了这些问题,它能解决你的问题吗?这些都没问题,材料和课程都一样。翻译问题呵呵
Uncaught TypeError: Cannot read property 'previous' of undefined