我试图在函数中递归地展开嵌套数组;除了在要存储的函数之外创建一个新的空数组之外,我想不出办法。有没有办法我可以递归解包嵌套数组,同时在函数内部保留一个新的空数组?
var test = [1,2,33,[55,88,[23,[211],66,998],2000],4,2002,[111,58,22,[120],15],68];
var newArray =[];
function nestedArray(arr) {
arr = arr.forEach(function(item,index){
if(Array.isArray(item)){
return nestedArray(item);
}else{
newArray.push(item)
}
})
return newArray
}
nestedArray(test)
答案 0 :(得分:2)
从IIFE(立即调用的函数表达式)返回函数,并将newArray
放在其中。 " IIFE"创造一个"关闭"或"范围" newArray
和构建它的函数都可以驻留在其中:
var test = [1,2,33,[55,88,[23,[211],66,998],2000],4,2002,[111,58,22,[120],15],68];
var nestedArray = (function() {
var newArray = [];
return function(arr) {
arr = arr.forEach(function(item,index){
if(Array.isArray(item)){
return nestedArray(item);
}else{
newArray.push(item)
}
})
return newArray;
}
})();
console.log( nestedArray(test) );

答案 1 :(得分:2)
var test = [1,2,33,[55,88,[23,[211],66,998],2000],4,2002,[111,58,22,[120],15],68];
function nestedArray(oldArr, newArr) {
newArr = newArr || []
oldArr.forEach(function(item,index){
if(Array.isArray(item)){
return nestedArray(item, newArr);
}else{
newArr.push(item)
}
})
return newArr
}
console.log(nestedArray(test))
答案 2 :(得分:1)
您可以随时toString()
删除所有[]
,然后在逗号上拆分。
const array = [1,2,33,[55,88,[23,[211],66,998],2000],4,2002,[111,58,22,[120],15],68];
const newArray = array.toString().split(",").map(val => parseInt(val));
console.log(newArray);

答案 3 :(得分:0)
您可以使用Array#reduce
和Array#concat
的组合进行一点递归来完成工作。基本上你迭代给定的数组,如果值是一个数组递归调用嵌套数组函数并将结果连接到累加器,或者只是将值连接到累加器数组。
var test = [1,2,33,[55,88,[23,[211],66,998],2000],4,2002,[111,58,22,[120],15],68];
const nestedArray = arr =>
arr.reduce((acc, x) =>
acc.concat(
Array.isArray(x)
? nestedArray(x)
: x
)
, [])
console.log(
nestedArray(test)
)

<script src="https://codepen.io/synthet1c/pen/KyQQmL.js"></script>
&#13;
答案 4 :(得分:0)
我想出了一种不使用IIFE的方法
var test = [1,2,33,[55,88,[23,[211],66,998],2000],4,2002,[111,58,22,[120],15],68];
var nestedArray = function(arr) {
var newArray = [];
arr.forEach(function(item,index){
if(Array.isArray(item)){
var storage = nestedArray(item);
newArray = newArray.concat(storage)
}else{
newArray.push(item)
}
})
return newArray;
}
nestedArray(test);
通过创建var storage
,它允许我存储递归内容的结果,并且我可以将新数组的结果连接到我的旧数组。