我已经尝试了所有让我望而却步的方法,但是此循环并没有带来任何运气(尽管我对javascript很陌生)。
提示应提出问题,直到没有输入任何内容。到那时,所有先前输入的“结果”都应被处理。
结果应该看起来像(如果输入第一个提示:'CS A 4',第二个'BB B 3',第三个'CC C 3'..):....仅在第n个提示没有输入后才显示

COURSE GRADE HOURS
CS     A     4
BB     B     3
CC     C     3




 <!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>gpa.html</title>
</head>
<script type="text/javascript">
    function getData(){
        var input=0,
            results=[];

        while(input!==""){input = prompt("Enter course name, grade and credit hours (e.g., 'CS3520 A 4' or click OK with no data to terminate.");
        input = input.split(" ");
        if(input==""){
        results.push({
            course: input[0].trim(),
            grade: input[1].trim(),
            creditHours: parseInt(input[2], 10)
        });}}
        return results;
    }

    var app = function() {
        var result, results,
        COLUMN_SEPARATOR = "\t\t";

        document.writeln("<pre>");
        results = getData();

        document.writeln("COURSE" + COLUMN_SEPARATOR + "GRADE" + COLUMN_SEPARATOR + "HOURS");
        for (var i = 0, j = results.length; i < j; i++) {
            result = results[i];

            document.writeln(result.course + COLUMN_SEPARATOR + result.grade + COLUMN_SEPARATOR + result.creditHours);
        }

        document.writeln();
        computeGPA(results);
        document.writeln("</pre>");
    }

window.onload = app;

</script>
<body>
</body>
</html>

最佳答案

已删除(在拆分下方):if(input=="")

已添加(在拆分上方):if (input === "") { break; }

应该这样做:

function getData() {
    var input = 0,
        results = [];

    while (input !== "") {
        input = prompt("Enter course name, grade and credit hours (e.g., 'CS3520 A 4' or click OK with no data to terminate.");
        if (input === "") { break; }
        input = input.split(" ");

        results.push({
            course: input[0].trim(),
            grade: input[1].trim(),
            creditHours: parseInt(input[2], 10)
        });

    }
    return results;
}



var app = function () {
    var result, results,
    COLUMN_SEPARATOR = "\t\t";

    document.writeln("<pre>");
    results = getData();

    document.writeln("COURSE" + COLUMN_SEPARATOR + "GRADE" + COLUMN_SEPARATOR + "HOURS");
    for (var i = 0, j = results.length; i < j; i++) {
        result = results[i];

        document.writeln(result.course + COLUMN_SEPARATOR + result.grade + COLUMN_SEPARATOR + result.creditHours);
    }

    document.writeln();
    document.writeln("</pre>");
}


但是我认为这将是一个更好的解决方案:

function getData() {
    var input = true,
        results = [];

    while (input) {
        input = prompt("Enter course name, grade and credit hours (e.g., 'CS3520 A 4' or click OK with no data to terminate.");
        if (!input) { break; }
        input = input.split(" ");

        results.push({
            course: input[0].trim(),
            grade: input[1].trim(),
            creditHours: parseInt(input[2], 10)
        });

    }
    return results;
}

var app = function () {
    var result, results,
    COLUMN_SEPARATOR = "\t\t";

    document.writeln("<pre>");
    results = getData();

    document.writeln("COURSE" + COLUMN_SEPARATOR + "GRADE" + COLUMN_SEPARATOR + "HOURS");
    for (var i = 0, j = results.length; i < j; i++) {
        result = results[i];

        document.writeln(result.course + COLUMN_SEPARATOR + result.grade + COLUMN_SEPARATOR + result.creditHours);
    }

    document.writeln();
    document.writeln("</pre>");
}


因为取消的hint()的返回值取决于浏览器。在大多数浏览器中,返回值为null。但是,某些非常老的浏览器(例如IE的早期版本)曾经返回”(空字符串)。

因此,不要使用诸如if (input != '' && input != null)之类的东西,而应使用true或false。

用户按下确定,但输入字段为空input === ""

用户键入了一些内容,然后单击“确定”(或输入)input == true

用户按下CANCEL input == nullinput == ""

更新

关于textarea事情,尝试这样的事情(我没有测试):

textareaContentByLines = textareaContent.split("\n");

for(index = 0; index < textareaContentByLines.length; index++){
    input = textareaContentByLines.split(" ");
    results.push({
                course: textareaContentByLines[index][0].trim(),
                grade: textareaContentByLines[index][1].trim(),
                creditHours: parseInt(textareaContentByLines[index][2], 10)
            });
}

关于javascript - Javascript循环-无法解决这一问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31225767/

10-12 00:20
查看更多