【发布时间】:2017-09-17 23:32:03
【问题描述】:
请帮助我调查下面的function,因为我被卡住了,仍然很难弄清楚。
一切都很好直到它到达nested FOR loop 的最后一列。 每一行的最后一列的值只有"0"。但是,我使用Number() 函数将单元格值(i.e. "0") 设置为number,但我继续获取 NaN 作为最后一个元素 的 SUM 和 COUNT 数组。
colCount = 326 而rowCount = 374。
sum.length 和count.length 应该真的 是ONLY 325,因为headers 是不必要的 并且第一列只是由时间戳组成。我能够.push(0) 成功直到 nested FOR loop 更改最后一个元素的结果为NaN。
function processDataToDictionary(csv) {
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;
}
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]);
}
for (let i = 1; i < colCount; i++) {
// create an empty array
dictionary[headers[i]] = average[i];
}
return dictionary;
}
function isNullOrWhitespace(input) {
if (input == " ") {
return true;
} else {
return false;
}
}
【问题讨论】:
-
能否请您提供该函数的输入(参数),以便我可以在输入上运行它并重现问题?输入是否太大?你能把它上传到某个地方吗?
-
从你所说的,我猜
sum数组的问题只能在这里:sum[j] += Number(current);。我猜headers最后一个元素有问题,但如果不知道csvstring 是什么就很难知道。如果你能举一个csv的例子,那会很有帮助 -
嗨@flen,这是
csv文件的链接:drive.google.com/open?id=0BzZ5wr0I2306SU5DdXF1b21IU2c 真的卡住了,请帮忙。谢谢! -
@flen 同样的事情也发生在
count数组:(奇怪 -
顺便说一下,
isNullOrWhitespace在这里是未定义的,所以你所拥有的可能是:undefined+0(或其他数字)将始终等于 NaN。您能否发布此方法或者这可能是代码中的错误?
标签: javascript arrays loops csv for-loop