数组问题(javascript)

时间:2017-03-25 20:45:02

标签: javascript arrays prompt

我创建了一个小函数来存储书籍isbn,它的名字和它的作者。一切都很好,直到我开始打印阵列。在每个完成对象到数组的entery中,我希望它在新行中一个接一个地打印,但是每次插入新对象时都会从头开始打印对象。我该如何解决这个问题?

var books = [];
function blaBla(){
    while(isbn != null || name != null || writer != null){
        var isbn = window.prompt("Enter ISBN");
        var name = window.prompt("Enter name of the book");
        var writer = window.prompt("Enter name of the writer");
        var patternString = /^[a-zA-Z]+$/;
        var patternNum = /^[0-9]+$/;
        if(isbn.match(patternNum)){
            if(name.match(patternString)){
                if(writer.match(patternString)){
                    books.push({
                        isbn: isbn,
                        name: name,
                        writer: writer
                    });
                }
            }
        }
        for (var i=0; i<books.length; i++){
            document.write(books[i].isbn + " - " + books[i].name + " - " + books[i].writer + "</br>");
        }
    }
}

PS:我如何使它更清洁&#34;,所以当我在提示时点击取消时,它会自动停止并将数据输入数组,而如果我在&#34;作家&#34;提示,它会删除该对象的先前条目(该书的最后一个和最后一个名字)? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可能想要提供一些关于此功能正在执行的操作的更多上下文,以便我们可以帮助您按照要求更清晰地执行代码。我在这里将收集逻辑与显示逻辑分开,并且还使用了while (true)循环,其中包含空值或无效输入,这将停止数据收集。

请注意,提示/警告框是一种收集用户输入的可怕方式(非常笨拙的用户体验)。考虑使用表,输入字段和一些jQuery来添加行并验证用户输入到输入框中的内容。

var books = [];

function collectResponses() {
    var patternString = /^[a-zA-Z]+$/;
    var patternNum = /^[0-9]+$/;

    while (true) {
        var isbn = window.prompt("Enter ISBN");
        if (!isbn || !isbn.match(patternNum)) {
            break;
        }

        var name = window.prompt("Enter name of the book");
        if (!name || !name.match(patternNum)) {
            break;
        }

        var writer = window.prompt("Enter name of the writer");
        if (!writer || !writer.match(patternNum)) {
            break;
        }

        books.push({
            isbn: isbn,
            name: name,
            writer: writer
        });
    }
}

function displayResponses() {
    for (var i=0; i<books.length; i++){
        document.write(books[i].isbn + " - " + books[i].name + " - " + books[i].writer + "</br>");
    }
}