>但是,我正在尝试在函数中递归地解开嵌套数组的包装;除了在要存储的函数之外创建一个新的空数组之外,我想不出一种方法。有没有办法递归解开嵌套数组,同时在函数中保留一个新的空数组?
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)
从 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) );
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))
JSBIN 示例
您可以随时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);
您可以使用 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>
我想出了一种不使用 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
,它允许我存储递归的结果,并且可以将新数组的结果连接到旧数组。