如何在underscore.js中编写此代码?
for(var i=0; i<scope.courseContent.sections.length; i++){
if(scope.courseContent.sections[i].pages.length){
ctrl.pages.push({'content': scope.courseContent.sections[i].content});
for(var j=0; j<scope.courseContent.sections[i].pages.length; j++){
ctrl.pages.push({'content':scope.courseContent.sections[i].pages[j].content});
}
}
else{
if(scope.courseContent.sections[i].title == 'Course Title' || scope.courseContent.sections[i].title == 'Introduction'){
ctrl.pages.push({'content':scope.courseContent.sections[i].content});
}
}
}
我使用嵌套的.each
循环尝试了这个,但这不是一个问题。继承人我的做法:
_.each(scope.courseContent.sections, function(sections){
if(sections.pages.length){
ctrl.pages.push({'content': scope.courseContent.sections.content});
_.each(sections.pages, function(page){
ctrl.pages.push({'content':scope.courseContent.sections.pages.content});
});
}
else{
if(scope.courseContent.sections.title == 'Course Title' || scope.courseContent.sections.title == 'Introduction'){
ctrl.pages.push({'content':scope.courseContent.sections.content});
}
}
});
答案 0 :(得分:1)
问题是sections
,pages
等是原始代码中的数组,因为我们使用for
循环,使用像scope.courseContent.sections[i].content
之类的迭代索引访问项目,但是使用下划线尝试,您尝试使用.
直接从数组访问每个项目的属性,这将无法按预期工作。
当你使用下划线时,你会将每个项目作为第一个回调的参数,所以我认为你的代码应该是:
_.each(scope.courseContent.sections, function(section) {
if (section.pages.length) {
ctrl.pages.push({
'content': section.content
});
_.each(section.pages, function(page) {
ctrl.pages.push({
'content': page.content
});
});
} else if (section.title == 'Course Title' || section.title == 'Introduction') {
ctrl.pages.push({
'content': section.content
});
}
});
或者您可以在回调签名中添加第二个参数,该参数将是当前项的索引,如:
_.each(scope.courseContent.sections, function(section,i) {
和带有索引的加速项与原始代码一样:scope.courseContent.sections[i].content
,但这是不必要的。