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