【发布时间】:2014-01-05 13:03:46
【问题描述】:
包括二维数组的声明,我怎样才能使下面的递归?我希望它迭代直到没有“children()”。
self.buildRelationships = function () {
relationships = [];
relationships[0] = [];
relationships[1] = [];
relationships[2] = [];
relationships[3] = [];
relationships[0][0] = self.name();
$.each(self.children(), function(i, child) {
relationships[1][i] = child.name();
$.each(child.children(), function (j, grandchild) {
relationships[2][j] = grandchild.name();
$.each(grandchild.children(), function (k, greatgrandchild) {
relationships[3][k] = greatgrandchild.name();
})
})
})
}
目标的可视化
鉴于此数据:
- 我!
- 鲍勃
- 詹姆斯
- 戴尔
- 史蒂夫
- 詹姆斯
- 比尔
- 弗雷德
- 欧文
- 帕特里克
- 弗雷德
- 鲍勃
.children() 仅返回直接子代:
Bob.children() 将返回“James”和“Steve”。
Me!.children() 将返回“Bob”和“Bill”。
接受的答案将创建如下所示的数据:
relationships[0] = "Me!" //this will always have a length of only 1
relationships[1] = "Bob", "Bill"
relationships[2] = "James", "Steve", "Fred"
relationships[3] = "Dale", "Owen", "Patrick"
【问题讨论】:
-
您使用 $.each 有什么特别的原因吗?这似乎是无缘无故的很多开销。
-
@VoronoiPotato:
$.each是一种遍历数组和对象的通用方法。甚至$(...).each也不会很昂贵,因为它只是迭代已经选择的元素。此时没有发生 DOM 交互。 -
@VoronoiPotato:嗯?我只是说
.forEach是本机方法。.map和.forEach是不同的。总之,不是讨论这个的合适地方。我尊重您的意见(使用更快的方式),但不要做出虚假陈述($.each旨在迭代 DOM 元素)。 -
@VoronoiPotato:上次:你说的是
$(...).each,我说的是$.each,这就是OP使用的。你注意到 URL 的不同了吗?你:api.jquery.com/each,我:api.jquery.com/jQuery.each。我也可以为您引用:“$.each() 函数与 $(selector).each() 不同,后者用于专门迭代 jQuery 对象。$.each( ) 函数可用于迭代任何集合,无论是对象还是数组。” 我希望现在已经解决了。 -
为什么人们不使用 VanillaJS 是个谜
标签: javascript jquery recursion multidimensional-array