所以我有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的新手,所以我可能在理解对象时遇到了一些基本错误,但我无法弄明白。任何帮助将不胜感激,谢谢!