【发布时间】:2012-03-26 01:44:51
【问题描述】:
假设我有一个爬过数组的函数...
flatten([a, b, c, d, [e, f, g, [h, i, j, k], l], m, n, o, p])
>> [a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p]
Flatten 会爬过代码,遇到的每个数组都会递归地进入该数组并返回值,这样您就有了一个平面数组。
直到我们有一个数组,例如:
a = [];
a[0] = a;
这显然会产生无限递归:
Array[1]
0: Array[1]
0: Array[1]
0: Array[1]
0: Array[1]
0: Array[1]
0: Array[1]
...
如何在不修改数组的情况下检测到这种行为,以便函数可以处理这种情况?
【问题讨论】:
-
我们是否可以维护我们已经爬取的内容,如果我们已经爬取了那个数组,那么我们就处于上述情况......
-
查看this post。它基本上展示了如何编写一个限制递归深度的函数装饰器。
标签: javascript recursion pass-by-reference