如何在JS中迭代嵌套对象

5

我在这个问题上遇到了困难。

我需要迭代这些对象,以便按类别列出它们,类似于

商业书籍

书1

书2

书3

烹饪书籍

等等...

但是我无法找出如何迭代嵌套的对象。使用或不使用jquery都可以。

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

迭代对象的属性。每个属性都有一个对象数组作为值。迭代数组需要使用嵌套的for循环。请参考https://developer.mozilla.org/en/JavaScript/Guide/Statements#Loop_Statements。 - Felix Kling
4个回答

10

首先,学习如何在没有jQuery的情况下完成它是一个好主意。

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

那么你可以使用 $.each()


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

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

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

0

使用 .each() 进行循环非常简单:

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

这是我的 jsFiddle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接