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)
我的错是什么?
提前致谢
你需要移动resultArray内部flatArray并flatArray连接对结果的递归调用.
从结尾看到递归是一种很好的方法,也就是说,你需要一个数组作为结果,然后你需要在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)