2012-01-13 10 views
3

私はJSON構造を持っています。JSON配列の内容からプロトタイプ関数を含むJavaScriptオブジェクトを作成します

{ 
    books: [ 
    {"id": "book1", "title": "Book One"}, 
    {"id": "book2", "title": "Book Two"} 
    ] 
} 

これは、

function BookList() { 
    this.books = new Array(); 
} 

BookList.prototype.addBook = function(b) { 
    this.books[this.books.length] = b; 
} 

function Book(id, title) { 
    this.id = id || ''; 
    this.title = title || ''; 
    this.chapters = new Array(); 
} 

Book.prototype.addChapter = function(c) { 
    this.chapters[this.chapters.length] = c; 
} 

BookList内にブックオブジェクトの配列を作成する最適な方法は何ですか?

jQueryでは、$.parseJSON(jsonData).booksを使用してBookList配列を割り当て、プロパティ値を自動的に取得できますが、プロトタイプ関数で必要なオブジェクトを作成することはできません。

JSON配列を反復処理して各Bookオブジェクトを個別に作成する唯一の方法はありますか?この質問では、JSONから特定のプロトタイプオブジェクトを作成する方法について説明します:Parse JSON String into a Particular Object Prototype in JavaScript

私は、これは反復の適切なレベルでブックリストに適用するように拡張し、そこからブックオブジェクトの章にも適用することができるはず。

それは、$.parseJSONと初期割り当て後のオブジェクトの種類を変更することは可能ですか?

答えて

2
var json = { 
    books: [ 
    {"id": "book1", "title": "Book One"}, 
    {"id": "book2", "title": "Book Two"} 
    ] 
}; 

var list = new BookList(); 
list.books = json.books.map(convertToBook); 

function convertToBook(book) { 
    return new Book(book.id, book.title); 
} 
+0

私は '.map'でさらに詳しい情報を見つけようとしましたが、役に立たないものは見つかりませんでした。あなたが知っているリソースはありますか?関数呼び出し内にスコープがたくさんあるので、実際にうまく動作します。私が使用しているオブジェクトは、例よりも多くのプロパティを持っているので、プロパティ名がうまくいけば、 'return $ .extend(new Book()、json);ありがとう。 –

+0

[地図](https://developer.mozilla.org/ja/JavaScript/Reference/Global_Objects/Array/map) – Raynos