构建导航时如何避免嵌套循环?

时间:2017-02-03 19:40:21

标签: javascript jquery

我有一个JSON文件,用于存储导航面板(链接)的数据。简短版本如下:

[
    {
        "category": "Pages",
        "links": [
            {
                "url": "#",
                "caption": "Account",
                "dropdown": [
                    {
                        "url": "profile.html",
                        "caption": "Profile"
                    },
                    {
                        "url": "edit-profile.html",
                        "caption": "Edit Profile"
                    }
                ]
            },
            {
                "url": "orders.html",
                "caption": "Orders"
            },
            {
                "url": "faq.html",
                "caption": "FAQ"
            }
        ]
    },
    ...
]

因此,当我使用jQuery为这些链接构建HTML代码时,我有3个嵌套的for循环:

  • 1表示类别
  • 1表示该类别中的链接
  • 1表示可能的下拉链接

代码如下:

  for (var i = 0; i < data.length; i++) {
    ...
        for(var n = 0; n < data[i]["links"]; i++) {
            ...
            for(var k = 0; k < data[i]["links"][n]["dropdown"]; k++) {
                ...
            }
        }
   }

即使代码有效,我听说嵌套的for循环也不好(代码看起来也有些可怕)。有没有办法取代它?这种新方法会使代码运行得更快吗?

1 个答案:

答案 0 :(得分:2)

假设你有:

  • &#39; N&#39;根数组中的项目
  • &#39;米&#39;根数组中的每个项目的链接,以及
  • &#39;○&#39;每个链接下拉列表中的项目

您当前的解决方案是O(nmo)。无论您如何重新编写代码,都无法比此更好地优化时间复杂度。这是因为您绝对需要访问每个元素一次,优化超过O(nmo)意味着您跳过一些元素。

  

嵌套for循环不好

这有点概括。更具体地说,当不需要嵌套for循环时,嵌套for循环是不好的。在你的情况下,他们是必要的。

您可以重写以获取可读性等,但您现在处于最佳案例表现状态。