将数字字符串映射到返回 NaN 的整数
Posted
技术标签:
【中文标题】将数字字符串映射到返回 NaN 的整数【英文标题】:Mapping string of numbers to ints returning NaN 【发布时间】:2015-10-08 05:58:55 【问题描述】:我有一个简单的程序,它可以获取用户的分数并计算他们的加权分数。我的函数接受一串成绩并返回一个整数数组,但一直返回Nan
。这是我的功能:
function getUserScores(subject)
var category;
switch (subject)
case "test":
category = document.getElementById("testGrades").value;
category = category.split(',').map(function(item)
return parseInt(item, 10);
);
case "quiz":
category = document.getElementById("quizGrades").value;
category = category.split(',').map(function(item)
return parseInt(item, 10);
);
case "homework":
category = document.getElementById("homeworkGrades").value;
category = category.split(',').map(function(item)
return parseInt(item, 10);
);
default:
return "Error: something went wrong with switch statement";
所以如果我用getUserScores("test")
调用它,它会获取testGrades
值,即"96, 92, 94"
并返回NaN
而不是[96, 92, 94]
?我在这里做错了什么?
【问题讨论】:
您忘记退出每个case
by break
我认为return
是break
而你不需要包含它?
return
里面的map
fn 不影响getUserScores
,我想你还需要在return
里面添加一个getUserScores
return
只是将您的元素从字符串映射到 int 版本,而不是为了打破这种情况。
【参考方案1】:
你需要在每种情况下添加一个break,并且还需要返回category
function getUserScores(subject)
var category;
switch (subject)
case "test":
category = document.getElementById("testGrades").value;
category = category.split(',').map(function(item)
return parseInt(item, 10);
);
break;
case "quiz":
category = document.getElementById("quizGrades").value;
category = category.split(',').map(function(item)
return parseInt(item, 10);
);
break;
case "homework":
category = document.getElementById("homeworkGrades").value;
category = category.split(',').map(function(item)
return parseInt(item, 10);
);
break;
default:
return "Error: something went wrong with switch statement";
return category;
此外,请确保您正在获取所需的值,并且选择器可以正常使用:
category = document.getElementById("testGrades").value;
// add a console.log to test it
console.log(category);
【讨论】:
【参考方案2】:或者,完全删除 switch
语句:
function getUserScores(subject)
var ele = document.getElementById(subject + "Grades");
if (ele === null)
return null;
var category = ele.value;
category = category.split(',').map(function(item)
return parseInt(item, 10);
);
return category;
为确保在元素不存在时代码不会中断,当getElementById
找不到任何内容时,我返回null
。
【讨论】:
以上是关于将数字字符串映射到返回 NaN 的整数的主要内容,如果未能解决你的问题,请参考以下文章