【发布时间】: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] < 90和相关是多余的。如果grades[i] >= 90是false,那么grades[i] < 90必须已经成立,除非您正在处理NaN,这应该单独考虑,并且您的所有条件无论如何都会失败。
标签: javascript arrays if-statement