【问题标题】:JS. How do I call a function that iterates through an array?JS。如何调用遍历数组的函数?
【发布时间】:2020-10-11 17:23:06
【问题描述】:

免责声明:这是一项家庭作业。 我不确定我是否正确设置了我的代码。这是调用遍历数组的函数的正确方法吗?文档写入没有显示任何内容。

var main = new Array ( );
main[0] = new Array (90, 91, 92, 93, 94, 95, 96, 97, 98, 99);
main[1] = new Array (80, 81, 82, 83, 84, 85, 86, 87, 88, 89);
main[2] = new Array (70, 71, 72, 73, 74, 75, 76, 77, 78, 79);
main[3] = new Array (60, 61, 62, 63, 64, 65, 66, 67, 68, 69);
main[4] = new Array (50, 51, 52, 53, 54, 55, 56, 57, 58, 59);

//function declared
function getGrade(x) {
  var grade
  //inside the function, if/else statement
  if (x >= 90) {
    grade = "A";
  } else if (x >= 80) {
    grade = "B";
  } else if (x >= 70) {
    grade = "C";
  } else if (x >= 60) {
    grade = "D";
  } else {
    grade = "F";
  }
  return grade
};

// for loop 
for (i = 0; i < main.length; i++) {
  for (j = 0; j < main[i].length; j++) {
    document.write("David's number grade is" + main[i][j] + "and letter grade is a " + Getgrade(main[i]));
 }
};

【问题讨论】:

  • 这个函数被称为getGrade(),所以用Getgrade()调用它是行不通的(JS区分大小写。)如果你打开浏览器的控制台,你可以自己调试这些东西(webmasters.stackexchange.com/questions/8525/…)并查看错误消息。

标签: javascript arrays function for-loop if-statement


【解决方案1】:

将此更改为getGrade

document.write("David's numbe..." + main[i][j] + "..." + getGrade(main[i][j]));

【讨论】:

    【解决方案2】:

    您的代码中有两个错误。

    1. 您将getGrade 函数称为Getgrade。一个错字。
    2. 您的getGrade 函数需要一个数字参数,但您正在传递一个数组值main[i]。您需要将其更改为main[i][j],以便将此二维数组中的正确值传递给函数。

    将循环内的行更新到下面来修复它:

    document.write("David's number grade is " + main[i][j] + " and letter grade is a " + getGrade(main[i][j]) + '\n');
    

    【讨论】:

    • 完美答案!
    【解决方案3】:

    感谢您提到这是家庭作业,我就是这样对待它的,并想向您展示我认为重要的内容(注意:这可能与您的老师的想法不一致:))

    如果您想使用 Javascript,请查看 repl.it 网站。它是免费的,您可以非常轻松地运行代码并查看会发生什么。这导致了第 1 课,不要只是在文本编辑器中编写代码并假设它会运行。如果你不能测试你在做什么,那么你所做的几乎是无用的。花时间设置一个易于玩耍的环境。 Repl.it 允许快速转身进行测试,当你做错事时,它会在你的代码旁边给出正确的错误消息。所有这些都有助于消除您的挫败感。

    这是我的版本作为插图,仍然可以改进,但我想保持它与您所做的相似:

    // Scores to test
    const points = [
      [90, 91, 92, 93, 94, 95, 96, 97, 98, 99],
      [80, 81, 82, 83, 84, 85, 86, 87, 88, 89],
      [70, 71, 72, 73, 74, 75, 76, 77, 78, 79],
      [60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
      [50, 51, 52, 53, 54, 55, 56, 57, 58, 59]
    ];
    
    // Returns a letter score based on a number score
    function getGrade( x ) {
      if (x >= 90) return "A";
      if (x >= 80) return "B";
      if (x >= 70) return "C";
      if (x >= 60) return "D";
      return "F";
    };
    
    for (let i = 0; i < points.length; i++) {
      for (let j = 0; j < points[i].length; j++) {
        console.log("David's number grade is " + points[i][j] + " and letter grade is a " + getGrade(points[i][j]));
      }
    };
    

    我认为你应该从中学到什么:

    1. 清晰为王。当您编写代码时,并不是因为您今天理解了它,所以它是好代码。以这样一种方式写它,这样你仍然会理解三年后当你宿醉时会发生什么。虽然代码在功能上可能相同,但这并不意味着它同样好。

    2. 如果您正在编写 cmets(可能是因为您的老师说您应该这样做),请编写真正的 cmets。在函数上方编写“函数定义”不会增加任何价值。真正的开发人员是懒惰的,并且避免做不增加价值的事情。写一条注释来解释该函数的作用。如果你想不出好的评论,要么努力尝试,要么干脆不写评论。

    3. 如果您继续编写代码并在 Internet 上阅读有关代码的信息,您会看到各种近乎宗教的说法。拥有一个具有多个返回值的函数是我遇到的一个这样的话题。坦率地说,我不在乎,我会选择对我来说最易读的东西(再说一次,不是现在,三年后我不记得曾经写过这段代码)。

    4. 把东西分成小块。询问“为什么这个写不会产生任何东西”是任何开发人员整天面临的基本问题。把问题分解成更小的部分。看看你能不能写出不带字母的数字等级。然后添加您的功能。如果你这样做了,你会注意到当时事情已经坏了,这应该会给你一个线索,那就是这个函数在某种程度上是错误的。

    另一方面,谁决定没有“E”字母等级?那绝对不是程序员。

    【讨论】:

      【解决方案4】:

      迭代时修改getGrade函数

      var main = new Array ( );
      main[0] = new Array (90, 91, 92, 93, 94, 95, 96, 97, 98, 99);
      main[1] = new Array (80, 81, 82, 83, 84, 85, 86, 87, 88, 89);
      main[2] = new Array (70, 71, 72, 73, 74, 75, 76, 77, 78, 79);
      main[3] = new Array (60, 61, 62, 63, 64, 65, 66, 67, 68, 69);
      main[4] = new Array (50, 51, 52, 53, 54, 55, 56, 57, 58, 59);
      
      console.log(main);
      
      //function declared
      function getGrade(x) {
        var grade;
        //inside the function, if/else statement
        if (x >= 90) {
          grade = "A";
        } else if (x >= 80) {
          grade = "B";
        } else if (x >= 70) {
          grade = "C";
        } else if (x >= 60) {
          grade = "D";
        } else {
          grade = "F";
        }
        return grade
      };
      
      
      // for loop 
      for (i = 0; i < main.length; i++) {
        for (j = 0; j < main[i].length; j++) {
          document.write("David's number grade is" + main[i][j] + "and letter grade is a " + getGrade(main[i][j]));
       }
      }

      【讨论】:

        【解决方案5】:

        多么奇怪的编码方式! 虽然很简单:

        var main = 
          [ [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
          , [80, 81, 82, 83, 84, 85, 86, 87, 88, 89]
          , [70, 71, 72, 73, 74, 75, 76, 77, 78, 79]
          , [50, 51, 52, 53, 54, 55, 56, 57, 58, 59]
          ]
        
        const getGrade=x=>[...'FABCD'][[90,80,70,60].findIndex(e=>(x>=e))+1]
        
        main.forEach(row=>row.forEach(v=>{
          document.write(`David's number grade is ${v} and letter grade is a ${getGrade(v)} <br>`);
        }))

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-03-19
          • 1970-01-01
          • 2020-10-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-06
          • 2023-03-06
          相关资源
          最近更新 更多