如何在map和reduce之后访问原始单个条目

时间:2015-10-16 22:49:53

标签: javascript reduce

给出以下功能:

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)
    });

如何访问文件中的单个元素'file'? 由于'then'保证对它进行排序,我知道第一次进入最后一个时,file1是要映射的元素。在那个文件2之后,file3 ......

但是,除了增加索引以直接对原始文件和结果执行某些操作之外,还有其他方法吗?

2 个答案:

答案 0 :(得分:1)

让map函数返回一个包装器对象,该对象包含对文件和promise的引用。

...即

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

答案 1 :(得分:1)

Map和reduce不会在原地修改,因此原始文件数组仍然存在。此外,您可以传递第三个参数reduce,即当前索引。您可以使用此参数访问原始数组的相应元素

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()
});