将多个 CSV 文件组合成一个二维数组
Combine multiple CSV files into one 2D array
我想使用循环将多个 CSV 文件组合成一个二维数组 jquery。
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
。它接受一组承诺,并在所有承诺都解决后调用一个回调。因此,您可以像这样重构代码的 retrieve/parse 部分:
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
});
我想使用循环将多个 CSV 文件组合成一个二维数组 jquery。
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
。它接受一组承诺,并在所有承诺都解决后调用一个回调。因此,您可以像这样重构代码的 retrieve/parse 部分:
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
});