2012-06-27 26 views
5

Ok, estoy perplejo en este caso. necesito para iterar a través de estos para que pueda hacer una lista de la categoría así que algo comoCómo iterar a través de objetos anidados en JS

Libros del negocio

libro 1

Libro 2

Libro 3

de cocina Libros

etc.

Pero no se pudo averiguar cómo iterar a través de los objetos anidados. Con o sin jQuery es bien

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

repetir las propiedades del objeto. Cada uno tiene como valor una matriz de objetos. Iteramos sobre la matriz. Esto requiere un bucle anidado. Eche un vistazo a https://developer.mozilla.org/en/JavaScript/Guide/Statements#Loop_Statements –

Respuesta

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

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

buena idea es aprender cómo hacerlo sin jQuery primero.

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

Luego puede usar $.each().

+0

de acuerdo. ¡mejor consejo! –

0

bucle con each() es bastante fácil:

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

aquí es mi 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); 
     } 
    }); 
Cuestiones relacionadas