使用underscore.js嵌套.each循环

时间:2016-03-09 12:07:50

标签: underscore.js

如何在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});
            }
        }
});

1 个答案:

答案 0 :(得分:1)

问题是sectionspages等是原始代码中的数组,因为我们使用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,但这是不必要的。