2013-01-04 103 views
0
var books = new Array(); 

books[0] = "Silmarillion: "; 
books[1] = "Horus Rising: "; 
books[2] = "Lord of the Rings: "; 


var ratings = new Array(); 

ratings[0] = "9 "; 
ratings[1] = "8 "; 
ratings[2] = "7 "; 


function printBooks() 
{ 
    for(var i = 0; i < books.length; i++) 
    { 
    document.writeln(books[i] +" " + ratings[i]); 
    } 

} 


printBooks(); 

我有这个代码,它(基本上)实现了我想要它做的事情,但它是相当糟糕的。我想在两个函数中添加一个函数(addBooks(title,rating))来添加我的书籍和一个函数(printBooks())来打印它们。我希望用户被要求添加一本书,询问它的评级并做三次。 在此之后,我希望它被打印。推功能阵列

我试过这样做,但我不知道如何编写添加到数组中的函数。我只知道我应该使用push()而不是更多..我希望它足够清楚。

编辑

在这上面我也想有一个方法来计算增加的​​书籍的平均得分。我现在得到的代码是:

function averageRating() 
{ 
var sum = 0; 
for(var u = 0; u < ratings.length; u++) 
{ 
    sum += parseInt(ratings[u]); 
} 
var avg = sum/ratings.length; 
document.writeln("<br>Number of books read: " + ratings.length + "<br>The average rating of the books are: " + avg); 

averageRating(); 

回答

5

这个概念是你有一个图书馆的一些书。 所以一个OOP方法可能会用某种方法创建一个类库。像:

function Library() { 
    var books = []; 
    this.addBook = function(bookName,rate) { 
     books.push({name:bookName, rating:rate}); 
    } 
    this.printBooks = function() { 
     for(var i = 0; i < books.length; i++) { 
      document.writeln(books[i].name +": " + books[i].rating); 
     } 
    } 
} 

代码:

var myLibrary = new Library(); 
myLibrary.addBook('Silmarillion',9); 
myLibrary.addBook('Horus Rising',8); 
myLibrary.addBook('Lord of the Rings',7); 

myLibrary.printBooks(); 

但是,它可以改进。您可以创建一个类Book

function Book(name,options) { 
    this.name = name; 
    this.rating = options.rating; 
} 

和类库变为:

function Library() { 
    var books = []; 
    this.addBook = function(book) { 
     books.push(book); 
    } 
    this.printBooks = function() { 
     for(var i = 0; i < books.length; i++) { 
      document.writeln(books[i].name +": " + books[i].rating); 
     } 
    } 
    // EDIT: ADDED for new features required 
    this.countBook = function() { 
      return books.length; 
    } 
    this.calculateRatingAverage = function() { 
     var sum = 0; 
     for(var i = 0; i < books.length; i++) { 
      sum += books[i].rating; 
     } 
     return sum/books.length; 
    } 
} 

和它的使用就变成了:

var myLibrary = new Library(); 
myLibrary.addBook(new Book('Silmarillion',{rating:9})); 
myLibrary.addBook(new Book('Horus Rising',{rating:8})); 
myLibrary.addBook(new Book('Lord of the Rings',{rating:7})); 

myLibrary.printBooks(); 
document.writeln("<br>Number of books read: " + myLibrary.countBook() + "<br>The average rating of the books are: " + myLibrary.calculateRatingAverage()); 

所以,你有,你可以优化了坚实的结构,在...上下功夫。

+0

这似乎是做的伎俩..我只是想让你帮我添加一个函数,写出书的平均评分以及使其全部完成:) – Benji

+0

创建'书'对象作为参数对我来说似乎有点不直观。如果对象是在'addBook'方法内创建的,并且只有数据作为参数传递,那将会更加整洁。 – amustill

+0

@amustill对象如果问题变得更加复杂,那么Book有意义。所以你有一个对象,你可以随意复杂。这就是为什么它是答案的补充 –