映射和减少后如何访问原始单个条目
How to access original single entries after map and 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 是要映射的元素。在 file2、file3 之后...
但是,除了使用递增索引直接对原始文件和结果进行操作之外,还有其他方法吗?
让您的地图函数 return 包含对文件和 promise 的引用的包装器对象。
即....
function doSomethingWithFile(file){
//do something
return {file:file, promise:...}
}
files.map(doSomethingWithFiles).reduce(function(sequence, wrapper){
wrapper.file;
wrapper.promise;
});
map和reduce没有原地修改,所以原来的files数组依然存在。此外,您可以将第三个参数传递给 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()
});
给定以下函数:
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 是要映射的元素。在 file2、file3 之后...
但是,除了使用递增索引直接对原始文件和结果进行操作之外,还有其他方法吗?
让您的地图函数 return 包含对文件和 promise 的引用的包装器对象。
即....
function doSomethingWithFile(file){
//do something
return {file:file, promise:...}
}
files.map(doSomethingWithFiles).reduce(function(sequence, wrapper){
wrapper.file;
wrapper.promise;
});
map和reduce没有原地修改,所以原来的files数组依然存在。此外,您可以将第三个参数传递给 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()
});