将数字字符串映射到返回 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 我认为returnbreak 而你不需要包含它? 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 的整数的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 映射将所有值返回为 NaN [重复]

Javascript Nan 错误:将字符串解析为整数

将一组值映射到百分比

js数据类型

Java parseInt()和parseFloat()的用法

试图添加一个数组,但结果返回 NaN