2012-06-27 12 views
5

OK Jestem zaskoczony tym. muszę iterację je więc mogę zrobić listę kategorią więc cośJak iterować obiekty zagnieżdżone w JS

Biznes

Book 1

Book 2

Book 3

Gotowanie Książki

itp.

Ale nie mógł dowiedzieć się, jak iterować przez zagnieżdżonych obiektów. Z lub bez jQuery jest w porządku

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." 
     } 
    ], 
}; 
+0

iteracyjne nad właściwości obiektu. Każdy ma jako wartość tablicę obiektów. Iteruj po tablicy. Wymaga to zagnieżdżonej pętli for. Zapoznaj się z https://developer.mozilla.org/en/JavaScript/Guide/Statements#Loop_Statements –

Odpowiedz

1
jQuery.each(window.books, function(category, items) { 
    alert(category); 

    jQuery.each(items, function(idx, book) { 
     alert(category + ': ' + book.Title) 
    }); 
}); 
9

Dobrym pomysłem jest, aby dowiedzieć się, jak to zrobić bez jQuery pierwszy.

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); 
    } 
    } 
} 

Następnie można użyć $.each().

+0

uzgodnionym. najlepsza rada! –

0

Pętla z .each() jest całkiem proste:

$.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>");              
});      

tutaj jest mój jsFiddle

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); 
     } 
    }); 
Powiązane problemy