2016-03-09 46 views
1

如何在underscore.js中編寫此代碼?使用underscore.js嵌套.each循環

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循環,但這不是woking。繼承人我的方法:

_.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

的問題是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) {

和acceess項目索引就像原始代碼:scope.courseContent.sections[i].content,但這是不必要的。