javascript - 对递归函数感到困惑

标签 javascript recursion

我正在尝试编写一个递归函数,该函数采用带有嵌套数组的数组并将所有值放入单个数组中。现在它有时有效,但有时却无效。

function steamrollArray(arr) {
  var newArr = [];
  
  var func = function(array){
      for(i=0; i<array.length; i++){
        if(Array.isArray(array[i])){
          func(array[i]);
        }
        else {
          newArr.push(array[i]);
        }
      }
  };
  
  func(arr);
  return newArr;
}

当我运行 steamrollArray([1, [2], [3, [[4]]]]) 时它可以工作,但是如果我运行 steamrollArray([[1], [[2]], [3, [[4]]]]); 由于某种原因,它不包括 2,如果我运行 steamrollArray([1, [], [3 , [[4]]]]) 我的浏览器崩溃了。感谢您提供的任何见解!

最佳答案

你的问题是i在全局范围内,你需要将其声明为本地,所以添加let i

function steamrollArray(arr) {
  var newArr = [];
  
  var func = function(array){
      for(let i=0; i<array.length; i++){
        if(Array.isArray(array[i])){
          func(array[i]);
        }
        else {
          newArr.push(array[i]);
        }
      }
  };
  
  func(arr);
  return newArr;
}

console.log(steamrollArray([[1], [[2]], [3, [[4]]]]));
console.log(steamrollArray([1, [], [3, [[4]]]]));

否则,每次调用该函数时,i 都会增加,您可能会脱离键(如上一个示例中所示)或跳过某些元素(如第二个示例中所示)

关于javascript - 对递归函数感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42167812/

相关文章:

javascript - 获取表的 eq( ) 和第 n 个 child

javascript - 使用appendTo()时,点击事件不会绑定(bind)到动态元素

java - 在 Java 中递归生成字符串的幂集

javascript - JavaScript中的递归函数调用

json - 递归 JSON 模式

javascript - Google 跟踪代码管理器解析错误。主要表达

javascript - 在排序函数执行期间强制重绘以动画化步骤

javascript - 为什么我的代码告诉我 .draw 不是函数?

java - 地形/山地算法未按预期工作

perl - 在 Perl 中递归打开文件