有大佬遇到过这个问题吗:javascript 数组中循环添加字典列表求指导!

有三组以下格式的数组数据,想将这三组中的数据合并,出现问题报错如下:TypeError:Cannotreadproperty'children'ofundefined
categories:[{'id':0,'cname':''}]
courses:[{'id':0,'category_id':0'coursename':'',}]
chapter:[{'id':0,'courseid':0,'chaptername':''
}]
options:function(){
letobj=newArray()
letthat=this;
for(leti=0;iobj.push({
'value':that.categories[i].id,
'label':that.categories[i].cname,
'children':[],
});
for(letk=0;kif(that.categories[i].id==that.courses[k].category_id){
obj[i].children.push({
'value':that.courses[k].id,
'label':that.courses[k].coursename,
'children':[]
});
}
for(letj=0;jif(that.courses[k].id==that.chapters[j].courseid){
obj[i].children[k].children.push({//这里报错
'value':that.chapters[j].id,
'label':that.chapters[j].chaptername,
})
}
}
}
}
returnobj
}
慕侠2389804
浏览 259回答 2
2回答

Smart猫小萌

出错原因遍历courses的时候,如果if语句结果是false,categories中会缺少courses信息,遍历chapter的时候把数据push进categories下的courses里就会报错改进方案遍历chapter放在遍历courses的if语句内obj[i].children[k].children.push改为obj[i].children[coursesLength-1].children.push过程分析遍历categories执行第一次后的结构:[{label:'',value:'',children:[]}]遍历courses执行第一次后的结构iftrue的结构:[{label:'',value:'',children:[{label:'',value:'',children:[]}]}]iffalse:[{label:'',value:'',children:[]}]遍历chapter执行第一次的后的结构如果上一层的结构是[{label:'',value:'',children:[]}],执行obj[i].children[k].children.push({label:'',value:''})会报错如果上一层的结构是[{label:'',value:'',children:[{label:'',value:'',children:[]}]}],执行结果会是期望的模样[{label:'',value:'',children:[{label:'',value:'',children:[{label:'',value:''}]}]}]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript