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

sdvnksv

我有一个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循环不好(代码看起来也有点吓人)。有替代的方法吗?这种新方法会使代码运行更快吗?

Xbonez

假设您有:

  • 根数组中的'n'个项目
  • 根数组中每个项目的“ m”个链接,以及
  • 每个链接下拉菜单中的“ o”项

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

嵌套循环是不好的

这有点笼统。更具体地说,当不需要嵌套for循环时,嵌套for循环就不好了。在您的情况下,它们是必需的。

您可以重写以提高可读性,等等,但是您现在处于最佳状态。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章