JavaScript:数字成绩到字母等级

时间:2017-02-27 17:59:31

标签: javascript arrays loops conditional

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。

4 个答案:

答案 0 :(得分:1)

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

我建议你使用一个空数组变量来存储结果。

对于每个循环,您将为<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width"> <title>JS Bin</title> <script src="https://code.jquery.com/jquery.min.js"></script> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" type="text/css" /> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> <script src="https://code.jquery.com/jquery-3.1.0.js"></script> </head> <body> <ul class="nav nav-tabs"> <li><a href="#home" data-toggle="tab">Home</a></li> <li><a href="#profile" data-toggle="tab">Profile</a></li> <li><a href="#messages" data-toggle="tab">Messages</a></li> <li><a href="#settings" data-toggle="tab">Settings</a></li> </ul> <div class="tab-content"> <div class="tab-pane active" id="home">This is Home</div> <div class="tab-pane" id="profile">This is Profile</div> <div class="tab-pane" id="messages">This is Messages</div> <div class="tab-pane" id="settings">This is Settings</div> </div> <div id="newHome" class='new'> Want to print home content here </div> <div id="newProfile" class='new'> Want to print profile content here </div> <div id="newMessages" class='new'> Want to print messages content here </div> <div id="Settings" class='new'> Want to print settings content here </div> </body> </html>变量分配新等级,然后将其推入textG数组。每个循环result都会重置textG变量,因此不存在复制/覆盖结果的风险。

textG = ''循环的所有循环之后,返回for数组。

result

答案 1 :(得分:0)

您将等级分配给变量,然后在每次迭代时覆盖它。

尝试使用textG.push('A')代替

答案 2 :(得分:0)

每次迭代都会覆盖你的返回值。

尝试创建一个数组,并将解决方案添加到数组中。

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]))

var solutionArr = [];

jsfiddle

答案 3 :(得分:0)

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

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; }