首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript:数字等级到字母等级

JavaScript:数字等级到字母等级
EN

Stack Overflow用户
提问于 2017-02-27 17:59:31
回答 5查看 2.4K关注 0票数 3

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,这是我到目前为止的代码,但是它只给出数组中最后一个数字的字母等级。我做错了什么?

代码语言:javascript
复制
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。

EN

回答 5

Stack Overflow用户

发布于 2017-02-27 18:04:12

你用循环的每一个周期覆盖你的变量,这就是为什么你只得到一个--最后一个等级。

我建议您使用一个空数组变量将结果存储在内部。

对于每个循环,您将为textG变量分配新的级别,然后将其推到result数组中。textG变量会被每个循环textG = ''重新处理,这样就不会有复制/覆盖结果的风险。

for循环的所有循环之后,将返回result数组。

代码语言:javascript
复制
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]))

票数 1
EN

Stack Overflow用户

发布于 2017-02-27 18:26:20

对于第一部分,您可以使用一个对象并迭代所需级别的键。

代码语言:javascript
复制
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));
代码语言:javascript
复制
.as-console-wrapper { max-height: 100% !important; top: 0; }

票数 1
EN

Stack Overflow用户

发布于 2017-02-27 18:02:18

您将这个等级分配给一个变量,然后用每次迭代覆盖它。

试试textG.push('A')

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42492644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档