我想使用jquery循环将多个CSV文件组合成一个2D数组。
function drawChart(){
filename="/projectUCF/SN00.csv";
$.get(filename, function(csvString){
var arrayData1 = $.csv.toArrays(csvString, {onParseValue: $.csv.hooks.castToScalar});
var removeRows = 1;
while (removeRows--) {
arrayData1.shift();
}
filename="/projectUCF/SN01.csv";
$.get(filename, function(csvString){
var arrayData2 = $.csv.toArrays(csvString, {onParseValue: $.csv.hooks.castToScalar});
var removeRows = 2;
while (removeRows--) {
arrayData2.shift();
}
var arrayData=[...arrayData1,...arrayData2];
console.log(arrayData);
var data = new google.visualization.arrayToDataTable(arrayData);
var view = new google.visualization.DataView(data);
view.setColumns([1,5]);
var options = {
title: "Battery State of Charge (7 days)",
hAxis: {format: 'M/d hh:mm'},
vAxis: {title: "Charge Level (in Percentage)", minValue:0, maxValue:100},
legend: 'none'
};
chart.draw(view,options);
});
});
}
我想使用一个循环,而不是多次使用$.get。我是新来的,所以任何帮助都很感激。
实现这一点的一种方法是使用Promise.all
。它接受一组promise,并在所有promise都已解决时调用一个回调。因此,您可以像这样重组代码的检索/解析部分:
var filenames = ["/projectUCF/SN00.csv", "/projectUCF/SN01.csv"];
var promises = [];
// create array of promises, one per file, that resolve after the file is retrieved a resolve with the parsed data
filenames.forEach(function (filename) {
promises.push(new Promise(function (resolve, reject) {
$.get(filename, function (csvString) {
var fileData = $.csv.toArrays(csvString, { onParseValue: $.csv.hooks.castToScalar });
var removeRows = 1;
while (removeRows--) {
fileData.shift();
}
resolve(fileData);
});
}));
});
// wait until all files have been retrieved, then continue
Promise.all(promises).then(function (results) {
var arrayData = [];
results.forEach(function (fileData) {
arrayData.push(...fileData);
});
// remaining code goes here
});