Javascript 在构建导航时,如何避免嵌套循环?
我有一个JSON文件,用于存储导航面板(链接)的数据。简短版本如下:Javascript 在构建导航时,如何避免嵌套循环?,javascript,jquery,Javascript,Jquery,我有一个JSON文件,用于存储导航面板(链接)的数据。简短版本如下: [ { "category": "Pages", "links": [ { "url": "#", "caption": "Account", "dropdown": [ { "ur
[
{
"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"
}
]
},
...
]
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++) {
...
}
}
}
因此,当我使用jQuery为这些链接构建HTML代码时,我有3个嵌套的for
循环:
- 类别为1
- 1用于该类别内的链接
- 1查找可能的下拉链接
[
{
"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"
}
]
},
...
]
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(变量i=0;i
即使代码可以工作,我听说嵌套的for
循环也不好(代码看起来也有点吓人)。有办法取代它吗?这种新方法会使代码运行更快吗?假设您有:
- 根数组中的“n”项
- 根数组中每个项目的“m”链接,以及
- 每个链接下拉列表中的“o”项
O(nmo)
。无论您如何重新编写代码,都无法优化您的时间复杂性。这是因为您绝对需要访问每个元素一次,而优化beyondO(nmo)
意味着您跳过了一些元素
嵌套for循环是不好的
这有点笼统。更具体地说,当不需要嵌套for循环时,嵌套for循环是不好的。在你的情况下,它们是需要的
您可以重新编写以提高可读性等,但您现在正处于最佳案例性能。有时,嵌套循环无法避免,除非跳过不必要的环。在这种情况下,您实际上必须一次处理一个键/值对,因此即使您确实找到了将其展平的方法,也不会实际减少工作。嵌套循环只有在导致不必要地多次命中同一数据段时才会出现问题。这看起来像是@J.Titus递归函数的作业。您可以创建一个递归算法来展平对象,然后在单个循环中使用展平的对象。嘿,我认为展平它需要更多的工作。首先,您必须迭代所有(或部分)键/值对以将其展平,然后必须循环展平的结构,从而两次命中某些(或全部)数据点。这是我想要看到的答案(无需重写代码)。谢谢