1.创建一个函数toLetterGrade,它接受百分比数组并返回相应级别字母的数组。例如:
toLetterGrade([90,80,55,85]); //returns ["A","A-","C","A"]
2.创建一个函数toGradePoints,它接受一个字母等级数组,并返回相应的等级点数组。例如:
toGradePoints(["A","A-","C","A"]); //returns [4.0,3.7,2.0,4.0]
3.创建一个函数GPA,它接受百分比数组并返回相应的等级点平均值。
我试着做数字1,这是我到目前为止的代码,但是它只给出数组中最后一个数字的字母等级。我做错了什么?
var arr
function toLetterGrade(arr) {
for (i = 0; i < arr.length; i++) {
if (arr[i] >= 85) {
textG = "A";
} else if (arr[i] >= 80) {
textG = "A-";
} else if (arr[i] >= 75) {
textG = "B+";
} else if (arr[i] >= 70) {
textG = "B";
} else if (arr[i] >= 65) {
textG = "B-";
} else if (arr[i] >= 60) {
textG = "C+";
} else if (arr[i] >= 55) {
textG = "C";
} else if (arr[i] >= 50) {
textG = "D";
} else {
textG = "F";
}
}
return textG;
}
document.write(toLetterGrade([90, 80, 70]))输出是B。
发布于 2017-02-27 18:04:12
你用循环的每一个周期覆盖你的变量,这就是为什么你只得到一个--最后一个等级。
我建议您使用一个空数组变量将结果存储在内部。
对于每个循环,您将为textG变量分配新的级别,然后将其推到result数组中。textG变量会被每个循环textG = ''重新处理,这样就不会有复制/覆盖结果的风险。
在for循环的所有循环之后,将返回result数组。
function toLetterGrade(arr) {
var textG = '';
var result = [];
for (i = 0; i < arr.length; i++) {
textG = '';
if (arr[i] >= 85) {
textG = "A";
} else if (arr[i] >= 80) {
textG = "A-";
} else if (arr[i] >= 75) {
textG = "B+";
} else if (arr[i] >= 70) {
textG = "B";
} else if (arr[i] >= 65) {
textG = "B-";
} else if (arr[i] >= 60) {
textG = "C+";
} else if (arr[i] >= 55) {
textG = "C";
} else if (arr[i] >= 50) {
textG = "D";
} else {
textG = "F";
}
result.push(textG);
}
return result;
}
document.write(toLetterGrade([90, 80, 70]))
发布于 2017-02-27 18:26:20
对于第一部分,您可以使用一个对象并迭代所需级别的键。
function getGrade(p) {
var grade = 'F';
Object.keys(grades).some(function (k) {
if (p >= grades[k]) {
grade = k;
return true;
}
});
return grade
}
var grades = { A: 85, 'A-': 80, B: 70, 'B-': 65, 'C+': 60, C: 55, D: 50, F: '' }
console.log([90, 80, 55, 85].map(getGrade));.as-console-wrapper { max-height: 100% !important; top: 0; }
发布于 2017-02-27 18:02:18
您将这个等级分配给一个变量,然后用每次迭代覆盖它。
试试textG.push('A')
https://stackoverflow.com/questions/42492644
复制相似问题