2015-10-16 46 views
0

鑑於以下功能:地圖後如何訪問原單條目,減少

var files = [file1,file2,file3]  
files.map(doSomethingWithFile).reduce(function (sequence, filePromise) { 
    return sequence.then(function() { 
     return filePromise; 
    }).then(function (content, err) { 
     //doSomethingWith(file,content) <-- How to access current file (either file1,file2 or file3) 
    }); 

如何訪問「文件」,這將是出文件的單個元素? 由於'then'確保將其排序,因此我知道第一次輸入last時,file1是要映射的元素。在那個文件2之後,文件3 ...

但是,除了增加索引以直接對原始文件和結果做些什麼之外,還有其他方法嗎?

+0

的相應元素,我不太清楚你所問的 - 但地圖和減少不到位修改,所以原來的文件陣列仍然存在。 –

+0

謝謝!我知道他們沒有修改。我只是想知道是否有一種簡單的方法來將結果和原始項目結合起來,而不必將它們存儲在數組中,並將它們手動映射到一起。 – Frame91

+0

您可以傳遞第三個參數來減少哪個是當前正在討論的數組的索引。這應該允許您訪問文件的當前文件索引。 –

回答

1

地圖和減少不到位修改,所以原來的文件陣列仍然存在。另外,您可以傳遞第三個參數來減少,這是當前的索引。您可以使用此參數訪問原始陣列

var files = [file1,file2,file3]  

files 
    .map(doSomethingWithFile) 
    .reduce(function(sequence, filePromise, i) { 
    return sequence.then(function() { 
     return filePromise; 
    }).then(function (content, err) { 
     doSomethingWith(file[i], content) // i comes from .reduce() 
}); 
+0

乾杯,正是我一直在尋找 – Frame91

1

讓你的map函數返回一個包含對文件和promise的引用的包裝器對象。

即....

function doSomethingWithFile(file){ 
    //do something 
    return {file:file, promise:...} 
} 
files.map(doSomethingWithFiles).reduce(function(sequence, wrapper){ 
    wrapper.file; 
    wrapper.promise; 
});