我试图编写一个递归函数,该函数接受带有嵌套数组的数组,并将所有值放入一个数组中。现在它有时会起作用,但有时它并不适用。
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;
当我运行steamrollArray([1, [2], [3, [[4]]]])
时,它可以正常运行,但如果我运行steamrollArray([[1], [[2]], [3, [[4]]]]);
,则由于某种原因它不会包含2,如果我运行steamrollArray([1, [], [3, [[4]]]])
,我的浏览器会崩溃。感谢您提出的任何见解!
答案 0 :(得分:3)
您的问题是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]]]]));
&#13;
否则,每次调用函数时,i
都会增加,你可以退出绑定(就像在上一个例子中一样)或跳过一些元素(如第二个例子中所示)