Javascript递归错误

Ben*_*ene 1 javascript arrays recursion

我的目标是编写一个平面数组的函数.因此,例如[1,[2,3]]应转向[1,2,3].我尝试使用递归方法,如下所示,但它产生一个无限循环.

function steamrollArray(arr) {

 var resultArray = [];

 function flatArray(array) {    
   for (i = 0; i < array.length; i++){
     if (Array.isArray(array[i])) {
         flatArray(array[i]);
     } else resultArray.push(array[i]);
   }
 }

 flatArray(arr);         
 return resultArray;
}

steamrollArray([1, [2,3]]);
Run Code Online (Sandbox Code Playgroud)

我的错是什么?

提前致谢

Nin*_*olz 5

你需要移动resultArray内部flatArrayflatArray连接对结果的递归调用.

从结尾看到递归是一种很好的方法,也就是说,你需要一个数组作为结果,然后你需要在start时声明一个数组并最后返回数组,或者在函数之间返回数组.

在处理数据时,您需要使用单个项或数组附加数组,作为子数组的递归调用的结果.这两个部分都在if子句中.

function steamrollArray(arr) {
    function flatArray(array) {
        var resultArray = [], // move inside
            i;                // declare as well
        for (i = 0; i < array.length; i++) {
            if (Array.isArray(array[i])) {
                resultArray = resultArray.concat(flatArray(array[i]));
                // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            } else {
                resultArray.push(array[i]);
            }
        }
        return resultArray; // return result here
    }

    return flatArray(arr); // return the result of the call
}

console.log(steamrollArray([1, [2, 3]]));
console.log(steamrollArray([[1, 9, [7, 8]], [2,3]]));
Run Code Online (Sandbox Code Playgroud)