Javascript - 关联数组不起作用?

时间:2015-04-10 20:58:39

标签: javascript csv

所以我有csv文件,基本上包括学生名单,他们所在的学校,以及他们正在学习的科目(例如化学,西班牙语,生物学等)。我想让我的程序让用户输入主题区域,并让页面返回每个主题被拍摄的次数。

然后我有一些javascript基本上从文本字段中获取一些用户输入,解析它,并将其放入数组中。然后,它导入csv文件并将主题列与用户输入的内容进行比较,并计算每个主题所花费的时间。

我的javascript看起来像这样:

var globalArray      = [];
var schoolList       = [];
var splitTextInput   = [];
var count            = 0;
var splitSubjectArea = []; 

function myFunction()
{
    var textInput = document.getElementById('numb').value;
    var needsTrimTextInput = textInput.split(",");            //creating an array to store user input 

    for( var q = 0; q < needsTrimTextInput.length; q++)          //getting rid of whitespace in user input 
    {
        splitTextInput[q] = needsTrimTextInput[q].trim(); 
    }

    for(var j = 0; j< splitTextInput.length; j++)
    {
        var sSubjectArea = {}; 
        sSubjectArea[ splitTextInput[j] ] = 0;         //assigning the value to 0 to store the count of each subject 
    }

    var fileName = document.getElementById("UniversitySelect").value;

    if( fileName.indexOf(".csv") > 0 )
    {
        d3.csv( "./" + document.getElementById("UniversitySelect").value, bob, counting);
    }

    function bob(d){
        return { Area: d.Area };
    }

    function counting(error, rows)
    { 
        globalArray = rows;
        for( var i = 0; i < rows.length; i++ ) //for the row in the CSV file 
        {                        
            for( var k = 0; k < splitTextInput.length; k++ ) // loop to go through the different inputed subject areas
            {            
                if( rows[i].Area.toLowerCase().indexOf( splitTextInput[k].toLowerCase() ) > -1)
                { 
                    count++; //stores the overall count 
                    sSubjectArea[splitTextInput[k]] += 1;  
                    //console.log(sResearchArea[splitTextInput[k]]);
                }       
            }
        } 
        console.log(rows);
        for(r = 0; r < splitTextInput.length; r++)
        {
            console.log( sSubjectArea[ splitTextInput[r] ] );
        }//for
    }//function
}//function

我知道它部分有效,因为如果我输入2个科目,比如化学和生物学,每个科目3次,那么计数将是6.但是,我不能让sSubjectArea为每个科目保留计数。我究竟做错了什么?当我添加console.log(sSubjectArea[splitTextInput[k]])行时,我得到的输出是:

    1 
    NaN 
    2 
    3 
    4 
    NaN 
    5 
    6 
    Array [ Object, Object, Object, Object, Object, Object, Object, Object, Object, Object, 86 more… ] 
    NaN
    6

我真的不明白为什么我会得到这些数字&amp;特别是NaN ....任何人都可以帮忙吗?我是javascript的新手,所以我可能在理解对象时遇到了一些基本错误,但我无法弄明白。任何帮助将不胜感激,谢谢!

0 个答案:

没有答案