Javascript数组变量在第二次使用时为空
我刚从C#开始接触javascript,有一种感觉,我不太了解变量赋值和操作的一些基本原理。 我有一个函数,可以根据年份和类别组过滤一些结果。 第一次运行该函数时,它会按预期工作 thisSchoolArray在外部填充,并不断保留其值。filteredArray未按预期更新。我可以想象,每次函数运行时,它都会将过滤器的所有结果放入FilterDarray。代码如下:Javascript数组变量在第二次使用时为空,javascript,arrays,filter,Javascript,Arrays,Filter,我刚从C#开始接触javascript,有一种感觉,我不太了解变量赋值和操作的一些基本原理。 我有一个函数,可以根据年份和类别组过滤一些结果。 第一次运行该函数时,它会按预期工作 thisSchoolArray在外部填充,并不断保留其值。filteredArray未按预期更新。我可以想象,每次函数运行时,它都会将过滤器的所有结果放入FilterDarray。代码如下: 函数UpdateResults(){ var filteredArray=thisSchoolArray.filter(函数(项
函数UpdateResults(){
var filteredArray=thisSchoolArray.filter(函数(项){
返回item.TestResults.some(e=>e.TestYear==yearToDisplay);
});
console.log(filteredArray);//第一次工作,下次函数运行时清空
var filteredClass=filteredArray.filter(x=>x.ClassGroup===classToDisplay);
filteredResults=filteredClass;
console.log(filteredResults);//第一次工作,下次函数运行时为空
表.setData(filteredResults);
UpdateRoundScores();
}
以下是登录到控制台的内容:
事实证明,我通过下拉菜单更改的显示年份是罪魁祸首。当我在寻找一个int传递到yearToDisplay变量时,下拉值将以字符串的形式出现。另一个简单但被忽视的问题是,解决方法是
yearToDisplay = parseInt(dropdown.value)
如果第二次调用时
filteredArray
变为空,则表示thisSchoolArray
或yearToDisplay
已更改。它本身已经变成了一个空数组,或者不再有任何与yearToDisplay
匹配的元素。我怀疑问题在于:。将日志语句更改为console.log(filteredArray.slice())
或console.log(JSON.stringify(filteredArray))
,这样您就可以得到一个不变的快照。或者yearToDisplay
或classToDisplay
正在更改。你能创建一个演示问题的脚本吗?哦,是的,不要使用console.log
进行调试。请改用调试器~@Phil DevTools与控制台不是一回事吗?仅供参考,总是建议对parseInt使用第二个参数,即parseInt(dropdown.value,10)
为什么这会更好@Phil?既然是一年,那么应该使用parseInt(dropdown.value,4),因为一年中只有4个数字?我建议您阅读文档