对于重复功能感到困惑

时间:2017-02-10 20:06:27

标签: 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;
}
&#13;
&#13;
&#13;

当我运行steamrollArray([1, [2], [3, [[4]]]])时,它可以正常运行,但如果我运行steamrollArray([[1], [[2]], [3, [[4]]]]);,则由于某种原因它不会包含2,如果我运行steamrollArray([1, [], [3, [[4]]]]),我的浏览器会崩溃。感谢您提出的任何见解!

1 个答案:

答案 0 :(得分:3)

您的问题是i在全局范围内,您需要将其声明为本地,因此请添加let i

&#13;
&#13;
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]]]]));
&#13;
&#13;
&#13;

否则,每次调用函数时,i都会增加,你可以退出绑定(就像在上一个例子中一样)或跳过一些元素(如第二个例子中所示)