尽管我使用了Number()函数,但数组的最后一个元素始终是NaN

时间:2017-04-21 05:34:10

标签: javascript arrays loops csv for-loop

请帮助我调查下面的function,因为我已经陷入困境并且仍然很难搞清楚。

一切都直到它到达nested FOR loop的最后一列。 每行的最后一列的值仅为"0"。但是,我使用Number()函数将单元格值 (i.e. "0")设为number,但我继续 {{1} } NaN&的{strong>最后一个元素 SUM数组。

COUNT colCount = 326

rowCount = 374sum.length应该真的count.length,因为ONLY 325 不必要且第一列是仅由时间戳组成。我能够headers成功,直到 .push(0) 更改最后一个元素的结果为nested FOR loop

NaN

1 个答案:

答案 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]);}。此致!