我试图阅读2个包含各行数字的CSV文件。
<input type="file" id="file[0]" name="file[0]">
<input type="file" id="file[1]" name="file[1]">
文件1内容:
111
222
文件2内容:
333
444
阅读完内容后,我将数字推送到新数组(csv_arr)并计算出现次数(csv_cnt)。
var csv_arr = new Array();
var csv_cnt = 0;
$("[id^=file]").each(function(index) {
file = $(this)[0].files[0];
if (file) {
var reader = new FileReader();
reader.onload = function(e) {
var csv_val = e.target.result.split("\r\n");
for (var i = 0; i < csv_val.length; i++) {
csv_arr.push( csv_val[i] );
csv_cnt++;
}
};
reader.readAsText(file);
}
});
console.log(csv_arr);
console.log(csv_arr.length);
console.log(csv_cnt);
console.log的结果是:
['111','222','333','444']
0
0
从结果中可以看出,数组看起来没问题,但是数组的长度和数量都是0!我被卡住了,不知道出了什么问题。有什么想法吗?
答案 0 :(得分:1)
您的代码正常,忘记filereader
异步。
这意味着当onload
仍在加载数据时,您的console.logs将会触发。
不。您的数组(至少使用您发布的确切代码)无法产生您所说的内容 - 否则您将获得4
和4
,因为数据包含值。这意味着你得到了这个:
[]
0
0
将console.logs传递到onload
函数,你就可以得到:
["111", "222"]
2
2
["111", "222", "333", "444"]
4
4