请帮助我调查下面的function
,因为我已经陷入困境并且仍然很难搞清楚。
一切都直到它到达nested FOR loop
的最后一列。 每行的最后一列的值仅为"0"
。但是,我使用Number()
函数将单元格值 (i.e. "0")
设为number
,但我继续 {{1} } NaN
&的{strong>最后一个元素 SUM
数组。
COUNT
colCount = 326
。
rowCount = 374
和sum.length
应该真的为count.length
,因为ONLY 325
不必要且第一列是仅由时间戳组成。我能够headers
成功,直到 .push(0)
更改最后一个元素的结果为nested FOR loop
。
NaN
答案 0 :(得分:1)
这会为您提供一个字典(对象),其中列名称为键,数字显示为值的正确平均值。但是,仍然必须检查逻辑中是否存在故障并且事实上平均值是不正确的。
function processDataToDictionary(csv) {
function isNullOrWhitespace(input) {
if (input === " ") {
return true;
} else if (input === null) {
return true;
//} else if (input === undefined) {
//return true;
} else {
return false;
}
}
var allTextLines = csv.split(/\r\n|\n/);
var csvArray = [];
for (let i = 0; i < allTextLines.length - 1; i++) {
var row = allTextLines[i].split(',');
csvArray.push(row);
}
var colCount = csvArray[0].length;
var rowCount = csvArray.length;
//Arrays of values
var count = [];
var sum = [];
var average = [];
var headers = [];
for (let i = 1; i < colCount; i++) {
var current = csvArray[0][i].replace(/"/g, '');
sum.push(0);
count.push(0);
headers[i] = current;
}
/**** I added these two lines ****/
sum.push(0);
count.push(0);
for (let i = 1; i < rowCount; i++) {
for (let j = 1; j < colCount ; j++) {
// Remove the quotes from your array
current = csvArray[i][j].replace(/"/g, '');
// Added the Method IsNullOrWhiteSpace
if (!isNullOrWhitespace(current)) {
// Parse as double not int to account for dec. values
sum[j] += Number(current);
count[j]++;
}
}
}
for (let i = 0; i < colCount; i++) {
average.push((sum[i] + 0.0) / count[i]);
}
// I added this line:
dictionary = {};
for (let i = 1; i < colCount; i++) {
dictionary[headers[i]] = average[i];
}
return dictionary;
}
让我知道这是否适合您。您可以使用以下代码循环显示值:for (let key in dictionary) {console.log("key: " + key + " , value: " + dictionary[key]);}
。此致!