gpt4 book ai didi

javascript - 用javascript解析多个文件 : the same file in for-loop

转载 作者:行者123 更新时间:2023-11-30 15:38:14 25 4
gpt4 key购买 nike

我有这样的代码:

    function processFiles(e) {

var filesInput = $('#files').prop('files');
var i, f;

for (i = 0, f = filesInput[i]; i != filesInput.length; ++i) {

var name = f.name;
console.log(name); //why here is the same file, even if i select in file input 2 different?

var reader = new FileReader();

reader.onload = function(e) {
var myFile = e.target.result;
console.log(myFile); //why here is the same file, even if i select in file input 2 different?
};
reader.readAsBinaryString(f);
}
}

$('#sbmt').click(function(e) {
processFiles();
});

但是当我尝试解析多个文件时,我在 for 循环和 .onload 回调中得到了相同的文件

我做错了什么?

最佳答案

why here is the same file, even if i select in file input 2 different?

因为在 for 循环中没有更新 f。您在初始化表达式中设置了 f,但您没有在更新表达式中更新它。

如果您想使用for 来控制f,请务必更新f:

for (i = 0, f = filesInput[i]; i != filesInput.length; ++i, f = filesInput[i]) {
// -------------------------------------------------------^^^^^^^^^^^^^^^^^^^

...但此时,您正在复制代码;相反,我只是将 sssignment 移动到循环体中:

for (i = 0; i != filesInput.length; ++i) {
f = filesInput[i]

...或者更有可能我会使用 forEach:

function processFiles(e) {
Array.from($('#files').prop('files')).forEach(function(f) {
var name = f.name;

var reader = new FileReader();

reader.onload = function(e) {
var myFile = e.target.result;
console.log(myFile);
};
reader.readAsBinaryString(f);
});
}

(请注意,它使用来自 ES2015 的 Array.from;您现在需要一个 polyfill 才能在野外使用它...)

关于javascript - 用javascript解析多个文件 : the same file in for-loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41207499/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com