【问题标题】:Mapping string of numbers to ints returning NaN将数字字符串映射到返回 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 版本,而不是为了打破这种情况。

标签: javascript switch-statement map-function


【解决方案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

    【讨论】:

      猜你喜欢
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 2017-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多