2017-04-21 53 views
0

任何人都可以正確指示我是否正確迭代兩個數組。有沒有其他的方法來編寫我的代碼而不嵌套迭代器?重構嵌套數組比較迭代器(循環)

下面的代碼迭代兩個使用下劃線庫比較值的對象數組。我最初使用嵌套for循環寫這些。

再次,我不是要求直接的答案,我是自學成才,有時候我覺得做的事情與他們應該做的完全相反。

function getFilesAdded(directoryData) { 
    return new Promise(function(resolve, reject) { 
     _.each(liveDirectories, function(liveDirectory) { 
      _.each(directoryData, function(directory) { 
       if (directory.DirectoryName === liveDirectory.DirectoryName && directory.Files.length > liveDirectory.NumOfFiles) { 
        var filesAdded = []; 
        numOfFilesAdded = directory.Files.length - liveDirectory.NumOfFiles; 
        fileArray = orderByTimeAdded(directory.Files, directory.DirectoryName); 
        fileArray.slice(0, numOfFilesAdded).forEach(pushToArray(filesAdded)) 
        liveDirectory.NumOfFiles = directory.Files.length; 
        filesAddedCount === 0 ? (filesAddedCount++, reject()) : (resolve(_.sortBy(filesAdded, 'FileName'))); 
       } 
      }) 
     }) 
    }) 
} 

liveDirectories

[ 
    { 
     DirectoryName: './zaf/betting', 
     NumOfFiles: 5 
    }, 
    { 
     DirectoryName: './zaf/racecard', 
     NumOfFiles: 5 
    } 
] 

directoryData

[ 
    { 
     DirectoryName: './zaf/betting', 
     Files: 
     [ 'b1.txt', 
      'b2.txt', 
      'b3.txt', 
      'b4.txt', 
      'betting_files_here.txt' ] 
    }, 
    { 
     DirectoryName: './zaf/racecard', 
     Files: 
     [ 'r1.txt', 
      'r2.txt', 
      'r3.txt', 
      'r4.txt', 
      'racecard_files_here.txt' ] 
    } 

]

+0

顯示您正在迭代的數據 –

+0

@Maximus在上面添加了。 – CBainbridge

+0

所以你的問題是什麼重新顯示你的數據? –

回答

0

代碼基礎上給出的建議

感謝大家的幫助。

function iterateAddedFiles(numOfFilesAdded, fileArray, filesAdded) { 
    fileArray.slice(0, numOfFilesAdded).forEach(pushToArray(filesAdded)) 
} 

function getFilesAdded(directoryData) { 
    return new Promise(function(resolve, reject) { 
     var dirMap = new Map() 
     _.each(liveDirectories, function(liveDirectory) { 
      dirMap.set(liveDirectory.DirectoryName, liveDirectory) 
     }) 
     _.each(directoryData, function(directory) { 
      var liveDir = dirMap.get(directory.DirectoryName) 
      if (directory.Files.length > liveDir.NumOfFiles && count > 0) { 
       var fileArray = []; 
       filesAdded = []; 
       numOfFilesAdded = directory.Files.length - liveDir.NumOfFiles 
       fileArray = orderByTimeAdded(directory.Files, directory.DirectoryName); 
       iterateFiles(numOfFilesAdded, fileArray, filesAdded) 
       liveDir.NumOfFiles = directory.Files.length; 
       count++ 
       resolve(_.sortBy(filesAdded, 'FileName')) 
      } else { 
       count++ 
      } 
     }) 
    }) 
}