我创建了一个小函数来存储书籍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;提示,它会删除该对象的先前条目(该书的最后一个和最后一个名字)? 提前谢谢。
答案 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>");
}
}