如何在维护局部变量历史的同时创建递归函数
How can I create a recursive function along maintaining the history of the local variables?
下面是一个函数,它基本上接受多维数组并将其转换为一维数组。我正在使用递归来解决这个问题。此外,还有一个约束——我不能使用全局变量,因此不能在函数之外定义任何变量。
这是函数。
function flattenArray(someArr) {
var results = [];
if(isArrayLike(someArr)) {
for(var i = 0; i != someArr.length; i++) {
flattenArray(someArr[i])
}
} else {
results.push(someArr);
}
return results;
}
在这里,函数将始终返回一个空白数组,因为每次函数递归时,它都会清除数组。那么,在不使用全局变量的情况下,如何避免这种情况呢?
假设:isArrayLike()函数返回true或false。
您可以传递累加器:
function flattenArray(someArr, acc) {
acc = acc || [];
if (isArrayLike(someArr)) {
for(var i = 0; i != someArr.length; i++) {
flattenArray(someArr[i], acc)
}
} else {
acc.push(someArr);
}
return acc;
}
或者不使用循环,使用reduce
和内置Array.isArray
:
function flatten(xs) {
return xs.reduce(function(acc, x) {
return acc.concat(Array.isArray(x) ? flatten(x) : x)
},[])
}
为什么不尝试将数组作为第二个参数传递给函数,最初为空数组ieflawnArray(someArr,result),而不是每次递归时都传递更新的和最新的结果数组
相关文章:
- 递归函数中断
- 将jQuery对象传递到setTimeout递归函数中
- 对象与递归函数的比较
- 循环内部的递归函数未按预期工作
- 递归函数返回不正确
- 递归函数编程困境
- 给定一个带有数字的数组,我如何编写一个递归函数,当 2 个元素加起来为一个目标时,它会在数组中查找索引
- 返回不会退出 javascript 中的递归函数
- jquery递归函数转换为非递归函数
- AngularJS,promise带有递归函数
- 如何停止此递归函数
- 如何将下面的递归函数转换为纯函数
- jQuery setTimeout ajax递归函数在即时消息程序中短时间后抛出错误
- Javascript递归函数引用了这一点
- 如何将这个递归函数转换为迭代函数
- 如何在维护局部变量历史的同时创建递归函数
- JavaScript:创建嵌套UL的递归函数
- 在Javascript / jQuery中基于选项网格创建递归函数
- 这个用于创建范围的递归函数如何工作
- 使用 JavaScript 递归函数创建 HTML 不起作用