【问题标题】:Problem with Javascript function not returning total sum in a for loop with if conditionsJavascript函数的问题没有在带有if条件的for循环中返回总和
【发布时间】:2020-10-12 02:29:29
【问题描述】:

我正在编写没有任何 HTML 的纯 javascript,但我的某个函数需要返回总“课程点数”时遇到问题。

该程序包括提示用户参加的课程#,然后是收到的成绩,该成绩被推送到“成绩”数组中。函数calculateCP 将允许它重复数组的每个元素,并假设在以下条件下给我课程总分。

请帮助解释为什么我的功能不起作用!输出只返回数组的第一个元素,而不是所有元素的总和。

calculateCP = () => {
  let coursePoints;
  let total = 0;

  for (let i = 0; i < grades.length; i++) {
    if (grades[i] >= 90) {
      coursePoints = 4;
    } else if (grades[i] >= 80 && grades[i] < 90) {
      coursePoints = 3;
    } else if (grades[i] >= 70 && grades[i] < 80) {
      coursePoints = 2;
    } else if (grades[i] >= 60 && grades[i] < 70) {
      coursePoints = 1;
    } else if (grades[i] < 60) {
      coursePoints = 0;
    }
    return total = total + coursePoints;
  }
}
  const grades = [];

  let noOfCourses = parseInt(prompt("Please enter # of courses taken: "));
  console.log("\n")

  for (let i = 0; i < noOfCourses; i++) {
    grades.push(prompt('Enter grade recieved '));
  }
  console.log(calculateCP());
}

【问题讨论】:

  • return }。
  • @coderpc 我认为代码编辑不会重现意图。我认为它的意思是单独的sn-ps。照原样,它会在 TDZ 内部使用grades,并且是无限递归。
  • 我删除了返回并重新编辑了片段以包含函数的结束 }。输出显示未定义...
  • 只是为了更清楚一点:在for 主体的末尾有返回意味着,当到达它时,函数将返回。这意味着它第一次运行,也就是第一次迭代,也就是你只会考虑第一个元素。删除return,并在for 循环体之后执行return total;
  • 附带说明,else 案例只有在相关的 if 没有被评估的情况下才会被评估。这意味着grades[i] &lt; 90 和相关是多余的。如果grades[i] &gt;= 90false,那么grades[i] &lt; 90 必须已经成立,除非您正在处理NaN,这应该单独考虑,并且您的所有条件无论如何都会失败。

标签: javascript arrays if-statement


【解决方案1】:

在 for 循环中,您只想对值求和.. 仅在完成后,返回总数 :) 类似这样的内容..

calculateCP = () => {
  let coursePoints;
  let total = 0;

  for (let i = 0; i < grades.length; i++) {
    if (grades[i] >= 90) {
      coursePoints = 4;
    } else if (grades[i] >= 80 && grades[i] < 90) {
      coursePoints = 3;
    } else if (grades[i] >= 70 && grades[i] < 80) {
      coursePoints = 2;
    } else if (grades[i] >= 60 && grades[i] < 70) {
      coursePoints = 1;
    } else if (grades[i] < 60) {
      coursePoints = 0;
    }
    total = total + coursePoints;
  }
  return total;
}
  const grades = [];

  let noOfCourses = parseInt(prompt("Please enter # of courses taken: "));
  console.log("\n")

  for (let i = 0; i < noOfCourses; i++) {
    grades.push(prompt('Enter grade recieved '));
  }
  console.log(calculateCP());
}

【讨论】:

    【解决方案2】:

    尝试从 for 循环中删除 return 语句并将其放在它之后..

    改变这个:

    return total = total + coursePoints;
    

    到这里:

      ... for loop
      total = total + coursePoints;
    }
    return total;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 2020-01-02
      相关资源
      最近更新 更多