5

Ok I'm stumped on this one. I need to iterate through these so I can make a listing by the category so something like

Business Books

Book 1

Book 2

Book 3

Cooking Books

etc..

But couldn't figure out how to iterate through the nested objects. With or without jquery is fine

window.books = {
 "Business Books": [
 {
 Title: "Finance 101",
 Description: "Info for Finance 101 book goes here."
 },
 {
 Title: "Economics 123",
 Description: "Info for Economics 123 book goes here."
 },
 {
 Title: "Statistics for Beginners",
 Description: "Learn about Statistics."
 }
 ],
 "Cooking Books": [
 {
 Title: "Lowfat Treats",
 Description: "Eat a lowfat Diet"
 },
 {
 Title: "Chocolate Lovers",
 Description: "Eat a lot of chocolate"
 },
 {
 Title: "Book of Brownies",
 Description: "Stuff about Brownies"
 }
 ],
 "IT Books": [
 {
 Title: "Windows XP",
 Description: "Please go away"
 },
 {
 Title: "Linux",
 Description: "A how to guide."
 },
 {
 Title: "Unix",
 Description: "All about Unix."
 },
 {
 Title: "Mac",
 Description: "Costs too much."
 }
 ],
};
Andrew Whitaker
126k32 gold badges295 silver badges308 bronze badges
asked Jun 27, 2012 at 16:18
1
  • Iterate over the properties of the object. Each has as value an array of objects. Iterate over the array. This requires a nested for loop. Have a look at developer.mozilla.org/en/JavaScript/Guide/… Commented Jun 27, 2012 at 16:28

4 Answers 4

10

Good idea is to learn how to do it without jQuery first.

for(var category in window.books) {
 if(window.books.hasOwnProperty(category)) {
 console.log(category); // will log "Business Books" etc.
 for (var i = 0, j = window.books[category].length; i < j; i++) {
 console.log("Title: %s, Description: %s", window.books[category][i].Title, window.books[category][i].Description);
 }
 }
}

Then you can use $.each().

answered Jun 27, 2012 at 16:27
Sign up to request clarification or add additional context in comments.

Comments

2
$.each(window.books,function(k,v){ // k ==== key, v === value
 // Prints category
 console.log(k); 
 //Loops through category
 for(i=0,len=v.length;i<len;i++){
 console.log(v[i].Title);
 console.log(v[i].Description);
 }
 });
answered Jun 27, 2012 at 16:34

Comments

1
jQuery.each(window.books, function(category, items) {
 alert(category);
 jQuery.each(items, function(idx, book) {
 alert(category + ': ' + book.Title)
 });
});
answered Jun 27, 2012 at 16:25

Comments

0

Looping with .each() is pretty easy:

$.each(window.books, function(category, books) { 
 $("#books").append("<p>" + category + "</p><ul>"); 
 $.each(books, function(i, book) { 
 $("#books").append("<li>" + book.Title + ": " + book.Description + "</li>");
 }); 
 $("#books").append("</ul>"); 
}); 

here is my jsFiddle

answered Jun 27, 2012 at 16:32

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.